sql动态行转列的两种方法 |
本文标签:sql,动态行,转列 第一种方法: 复制代码 代码如下: select *from ( select Url,case when Month=01 then 1月 when Month=02 then 2月 when Month=03 then 3月 when Month=04 then 4月 when Month=05 then 5月 when Month=06 then 6月 when Month=07 then 7月 when Month=08 then 8月 when Month=09 then 9月 when Month=10 then 10月 when Month=11 then 11月 when Month=12 then 12月 end month,Quality from ( select Url,DATENAME(M,AuditingTime)Month,SUM(Quality) Quality from tb_order as a left join tb_WebSiteInfo as b on a.WebSiteInfoID=b.ID left join tb_OrderList as c on c.OrderID=a.ID where AuditingTime>2013-01-01 and b.ID>0 and Auditing=2 group by Url,DATENAME(M,AuditingTime) )as h ) as hh pivot ( sum(Quality) for month in([1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月])) as a 第二种方法: 复制代码 代码如下: declare @sql varchar(8000) select @sql = isnull(@sql + , , ) + [+CONVERT(varchar(7),AuditingTime,20)+] from tb_order as a left join tb_WebSiteInfo as b on a.WebSiteInfoID=b.ID left join tb_OrderList as c on c.OrderID=a.ID where AuditingTime>2013-01-01 and b.ID>0 and Auditing=2 group by CONVERT(varchar(7),AuditingTime,20) print @sql declare @sql2 varchar(8000)= set @sql2= select *from ( select Url, CONVERT(varchar(7),AuditingTime,20) AuditingTime,SUM(Quality) Quality from tb_order as a left join tb_WebSiteInfo as b on a.WebSiteInfoID=b.ID left join tb_OrderList as c on c.OrderID=a.ID where b.ID>0 and Auditing=2 group by Url, CONVERT(varchar(7),AuditingTime,20) ) as hh pivot (sum(Quality) for AuditingTime in ( + @sql + )) b print @sql2 exec(@sql2) |