日期:2014-05-18 浏览次数:20571 次
use test go create table Manual_Week_Trend([week] nvarchar(20),area1 int , area2 int, price int) insert Manual_Week_Trend select '09-03~09-09', 232 , 333, 33 insert Manual_Week_Trend select '09-10~09-16', 12 , 1212 , 211 insert Manual_Week_Trend select '09-17~09-23', 233, 333 , 3333 insert Manual_Week_Trend select '09-24~09-30', 34, 555 , 23 insert Manual_Week_Trend select '10-1~10-7', 56 , 88 ,444 insert Manual_Week_Trend select '10-8~10-15', 334, 44 , 444 go select [week],area1,ColName='area1' into #t from Manual_Week_Trend union all select [week],area2,ColName='area2' from Manual_Week_Trend union all select [week],price,ColName='price' from Manual_Week_Trend go declare @s nvarchar(4000) set @s='' select @s=@s+',['+[week]+']=sum(case when [week]='+quotename([week],'''')+' then area1 else 0 end)' from #t group by [week] exec('select ColName'+@s+' from #t group by ColName') ColName 09-03~09-09 09-10~09-16 09-17~09-23 09-24~09-30 10-1~10-7 10-8~10-15 ------- ----------- ----------- ----------- ----------- ----------- ----------- area1 232 12 233 34 56 334 area2 333 1212 333 555 88 44 price 33 211 3333 23 444 444
------解决方案--------------------
静态方法: use test go create table Manual_Week_Trend([week] nvarchar(20),area1 int , area2 int, price int) insert Manual_Week_Trend select '09-03~09-09', 232 , 333, 33 insert Manual_Week_Trend select '09-10~09-16', 12 , 1212 , 211 insert Manual_Week_Trend select '09-17~09-23', 233, 333 , 3333 insert Manual_Week_Trend select '09-24~09-30', 34, 555 , 23 insert Manual_Week_Trend select '10-1~10-7', 56 , 88 ,444 insert Manual_Week_Trend select '10-8~10-15', 334, 44 , 444 go select ColName, [09-03~09-09]=sum(case when [week]='09-03~09-09' then area1 else 0 end), [09-10~09-16]=sum(case when [week]='09-10~09-16' then area1 else 0 end), [09-17~09-23]=sum(case when [week]='09-17~09-23' then area1 else 0 end), [09-24~09-30]=sum(case when [week]='09-24~09-30' then area1 else 0 end), [10-1~10-7]=sum(case when [week]='10-1~10-7' then area1 else 0 end), [10-8~10-15]=sum(case when [week]='10-8~10-15' then area1 else 0 end) from (select [week],area1,ColName='area1' from Manual_Week_Trend union all select [week],area2,ColName='area2' from Manual_Week_Trend union all select [week],price,ColNa