首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL SERVER【2】——行转列结果加下其他列

2012-12-23 
SQL SERVER【2】——行转列结果加上其他列接上篇……--二.行转列结果加上其他列--【1】行转列结果其他列SELECT 年

SQL SERVER【2】——行转列结果加上其他列

接上篇……

--二.行转列结果加上其他列
--【1】行转列结果+其他列

SELECT 年度,SUM(CASE(月份) WHEN 1  THEN 数量 END)  "1月份",SUM(CASE(月份) WHEN 2  THEN 数量 END)  "2月份",SUM(CASE(月份) WHEN 3  THEN 数量 END)  "3月份",SUM(CASE(月份) WHEN 4  THEN 数量 END)  "4月份",SUM(CASE(月份) WHEN 5  THEN 数量 END)  "5月份",SUM(CASE(月份) WHEN 6  THEN 数量 END)  "6月份",SUM(CASE(月份) WHEN 7  THEN 数量 END)  "7月份",SUM(CASE(月份) WHEN 8  THEN 数量 END)  "8月份",SUM(CASE(月份) WHEN 9  THEN 数量 END)  "9月份",SUM(CASE(月份) WHEN 10 THEN 数量 END)  "10月份",SUM(CASE(月份) WHEN 11 THEN 数量 END)  "11月份",SUM(CASE(月份) WHEN 12 THEN 数量 END)  "12月份",SUM(数量)总数量,CAST(avg(数量*1.0)as decimal(12,2)) 平均数量FROM 订单表GROUP BY 年度ORDER BY 年度

SQL SERVER【2】——行转列结果加下其他列

--【2】静态SQLselect m.*,n.总数量,n.平均数量from(select * from 订单表 pivot (SUM(数量) for 月份 in("1","2","3","4","5","6","7","8","9","10","11","12"))a)m,(select 年度,SUM(数量)总数量,CAST(avg(数量)as decimal(12,2)) 平均数量 from 订单表 group by 年度)nwhere m.年度=n.年度
--【3】动态SQLdeclare @sql varchar(8000)set @sql='select 年度'select @sql=@sql+',SUM(CASE CONVERT(VARCHAR(2),月份) WHEN '''+CONVERT(VARCHAR(2),月份)+''' THEN 数量 ELSE 0 END) ['+CONVERT(VARCHAR(2),月份)+']'from(SELECT DISTINCT 月份 FROM 订单表)aset @sql=@sql+',SUM(数量)总数量,CAST(avg(数量)as decimal(12,2)) 平均数量 from 订单表 group by 年度'exec(@sql)--【4】 动态SQL-使用stuff()declare @sql varchar(8000)set @sql=''  --初始化变量@sqlselect @sql=@sql+',"'+CAST(月份 AS VARCHAR(2))+'"' from 订单表 group by 月份    --变量多值赋值set @sql=stuff(@sql,1,1,'')    --去掉首个','set @sql='SELECT m.*,n.总数量,n.平均数量 FROM (select * from 订单表 pivot (SUM(数量) for 月份 in ('+@sql+')) a) m ,(select 年度,SUM(数量) 总数量,CAST(avg(数量) as decimal(12,2)) 平均数量 from 订单表 group by 年度) n where m.年度=n.年度'exec(@sql)--或使用isnull()declare @sql varchar(8000)select @sql=isnull(@sql+',"','"')+CAST(月份 AS VARCHAR(2))+'"' from 订单表 group by 月份set @sql='SELECT m.*,n.总数量,n.平均数量 FROM(select * from 订单表 pivot (SUM(数量) for 月份 in ('+@sql+'))a) m ,(select 年度,SUM(数量) 总数量,CAST(avg(数量) as decimal(12,2)) 平均数量 from 订单表 group by 年度) n where m.年度=n.年度'exec(@sql)


SQL SERVER【2】——行转列结果加下其他列

热点排行