自动创建临时表,并给临时表添加一个自动增长的行号字段
2006-11-02 18:32
561 查看
create table #pageindex(id int identity(1,1) not null,nid int)
set rowcount @PageUpperBound
--读取符合记录的id放到临时表中
INSERT INTO #pageindex(nid)
SELECT C.ConID
FROM tbl_EmpContract as C INNER JOIN
tbl_Employee as E ON
C.EmpID = E.EmpID INNER JOIN
tbl_DepartmtList as D ON E.DepID = D.DepID
where
(C.ConState = '未审核')
select IDENTITY(int, 1,1) AS ID_Num,gdsid,ordersn into #gds_day_sell_temp
from gds_day_sell
select * from #gds_day_sell_temp
还可以这样写:ID_Num = IDENTITY(int, 1, 1)
也可以是其他类型:
IDENTITY(smallint, 100, 1) AS job_num
加上这个 去掉 重复
FROM (Select TOP 100 Percent * FROM [BarginSaleArea] ) [BarginSaleArea]
新写sql server的分页sql如下:
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
SELECT IDENTITY(int, 1,1) AS id,g.gdsmst_gdsid as nid into #pageindex
FROM tbl_EmpContract as C INNER JOIN
tbl_Employee as E ON
C.EmpID = E.EmpID INNER JOIN
tbl_DepartmtList as D ON E.DepID = D.DepID
where
(C.ConState = '未审核')
-- and (E.EmpState = '在岗')
AND (D.DepSN LIKE @DepSN+'%')
AND (E.EmpName LIKE '%'+@EmpName+'%')--查询
AND (E.EmpIDSN LIKE '%'+@EmpIDSN+'%')--查询
AND (D.DepName LIKE '%'+@DepName+'%')--查询
--读取记录完结
SELECT
C.ConID,
C.ConName,
C.ConNumber,
C.ConState,
C.ConKinds,
C.ConBeginDate,
C.ConEndDate,
C.ConSignCompany,
C.ConSignDate,
C.ConTemplet,
C.ConTryWorkDate,
C.ConExeg,
E.EmpIDSN,
E.EmpName,
dbo.GetDepAllName(E.DepID) as DepName,
E.EmpSex,
E.EmpBirthday,
E.EmpFunction,
D.DepSN,
cast(datediff(yy,E.EmpBirthday,getDate())+1 as int) EmpAge,
C.ConSort
FROM tbl_EmpContract as C INNER JOIN
tbl_Employee as E ON
C.EmpID = E.EmpID INNER JOIN
tbl_DepartmtList as D ON E.DepID = D.DepID,#pageindex as p
where (C.ConID = p.nid)
and (p.id>@PageLowerBound)
and (p.id<=@PageUpperBound)
order by p.id
END
SET NOCOUNT OFF
GO
GROUP BY 的几种用法
Group by 是SQL Server 中常用的一种语法,语法如下:
[/code]
[/code]
set rowcount @PageUpperBound
--读取符合记录的id放到临时表中
INSERT INTO #pageindex(nid)
SELECT C.ConID
FROM tbl_EmpContract as C INNER JOIN
tbl_Employee as E ON
C.EmpID = E.EmpID INNER JOIN
tbl_DepartmtList as D ON E.DepID = D.DepID
where
(C.ConState = '未审核')
select IDENTITY(int, 1,1) AS ID_Num,gdsid,ordersn into #gds_day_sell_temp
from gds_day_sell
select * from #gds_day_sell_temp
还可以这样写:ID_Num = IDENTITY(int, 1, 1)
也可以是其他类型:
IDENTITY(smallint, 100, 1) AS job_num
加上这个 去掉 重复
FROM (Select TOP 100 Percent * FROM [BarginSaleArea] ) [BarginSaleArea]
新写sql server的分页sql如下:
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
SELECT IDENTITY(int, 1,1) AS id,g.gdsmst_gdsid as nid into #pageindex
FROM tbl_EmpContract as C INNER JOIN
tbl_Employee as E ON
C.EmpID = E.EmpID INNER JOIN
tbl_DepartmtList as D ON E.DepID = D.DepID
where
(C.ConState = '未审核')
-- and (E.EmpState = '在岗')
AND (D.DepSN LIKE @DepSN+'%')
AND (E.EmpName LIKE '%'+@EmpName+'%')--查询
AND (E.EmpIDSN LIKE '%'+@EmpIDSN+'%')--查询
AND (D.DepName LIKE '%'+@DepName+'%')--查询
--读取记录完结
SELECT
C.ConID,
C.ConName,
C.ConNumber,
C.ConState,
C.ConKinds,
C.ConBeginDate,
C.ConEndDate,
C.ConSignCompany,
C.ConSignDate,
C.ConTemplet,
C.ConTryWorkDate,
C.ConExeg,
E.EmpIDSN,
E.EmpName,
dbo.GetDepAllName(E.DepID) as DepName,
E.EmpSex,
E.EmpBirthday,
E.EmpFunction,
D.DepSN,
cast(datediff(yy,E.EmpBirthday,getDate())+1 as int) EmpAge,
C.ConSort
FROM tbl_EmpContract as C INNER JOIN
tbl_Employee as E ON
C.EmpID = E.EmpID INNER JOIN
tbl_DepartmtList as D ON E.DepID = D.DepID,#pageindex as p
where (C.ConID = p.nid)
and (p.id>@PageLowerBound)
and (p.id<=@PageUpperBound)
order by p.id
END
SET NOCOUNT OFF
GO
GROUP BY 的几种用法
Group by 是SQL Server 中常用的一种语法,语法如下:
[ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ] ]
1、最常用的就是这种语法,如下:
Select CategoryID, AVG(UnitPrice), COUNT(UnitPrice) FROM dbo.Products Where UnitPrice > 30 GROUP BY CategoryID ORDER BY CategoryID DESC
这个语句查询出,所有产品分类的产品平均单价,单价计数。并且单价在 30 以上的记录。
2、再看看这种语法,如下:
Select CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice) FROM dbo.Products Where UnitPrice > 30 GROUP BY CategoryID ORDER BY CategoryID DESC
使用 DISTINCT 的时候,将会去除重复的价格平均单价。
[code]3、如果希望在分类统计之后,再使用条件过滤,下面的语句可以做为参数:
Select CategoryID, SUM(UnitPrice) AS SumPrice FROM dbo.Products GROUP BY CategoryID HAVING SUM(UnitPrice) > 300
HAVING 与 Where 语句类似,Where 是在分类之前过滤,而 HAVING 是在分类之后过滤。 它和 Where 一样使用 AND、OR、NOT、LIKE 组合使用。
[/code]
4、如果希望再在分类统计中,添加汇总行,可以使用以下语句:
Select CategoryID, SUM(UnitPrice), GROUPING(CategoryID) AS 'Grouping' FROM dbo.Products GROUP BY CategoryID WITH ROLLUP
Grouping 这一列用于标识出哪一行是汇总行。 它使用 ROLLUP 操作添加汇总行。
5、如果使用 WITH CUBE 将会产生一个多维分类数据集,如下:
Select CategoryID, SupplierID, SUM(UnitPrice) AS SumPrice FROM dbo.Products GROUP BY CategoryID, SupplierID WITH CUBE
它会产生一个交叉表,产生所有可能的组合汇总。
6、使用 ROLLUP CUBE 会产生一个 NULL 空值,可以使用以下语法解决,如下:
[code]Select CASE WHEN (GROUPING(SupplierID) = 1) THEN '-1' ELSE SupplierID END AS SupplierID, SUM(UnitPrice) AS QtySum FROM dbo.Products GROUP BY SupplierID WITH CUBE
它首先检查当前行是否为汇总行,如果是就可以设置一个值,这里设置为 '-1' 。
[/code]
相关文章推荐
- Mysql创建一个表,字段设置为自动增长(自增字段)
- 给MySql表格添加一个自动增长的主键列
- oracle创建表,追加备注,添加主键,触发器,自动增长序列
- vb与sql数据库下下给access创建一个有自动编号字段的表
- 在Oracle、MySQL、MS SQL Server中创建自动增长字段
- 在oracle中创建自动增长字段
- 在oracle中创建自动增长字段
- 在oracle中创建自动增长字段
- 在oracle中创建自动增长字段
- mssql 和 mysql的区别,让自动增长列自动递增就必须指定其他列名,mysql创建事务,如果插入的字符多余字段的值,会报错?截取插入?带输出参数的存储过程,带If else判断
- Oracle使用序列创建自增字段(主键自动增长)
- 添加自动增长字段做主键
- mybatis创建一个或多个新用户 insert 字段和表名不确定时动态添加
- 用SQL在Access中创建带自动增长字段的表
- 转一个Oracle创建自动增长的例子
- 在Oracle、MySQL、MS SQL Server中创建自动增长字段
- Ecplise创建一个类的时候如何自动添加作者,时间等信息
- 为已创建好的临时表添加字段列
- postgreSQL怎样创建一个序列号/自动递增的字段
- 怎样在程序中为Access表创建一个自动编号字段?