一位转二维的语句——求解
数据库如下:
IDManPrintDateTimes
1羅邦偉2009/4/11
2梅強2009/4/32
3周林江2009/5/51
4周強2009/7/21
5陳剛2009/5/141
6陳華林2009/12/11
7羅邦偉2009/10/102
8方文祥2009/8/181
9周強2009/7/272
10陳剛2009/10/291
11陳華林2009/11/121
12李林峰2009/4/62
通过以下语句:
declare @sql varchar(8000) --为什么要这么大? 5分
set @sql='select Man' --select Man 作为最左边的字段吗?为什么又来一次@sql? 15分
select @sql=@sql+',['+dd+']=sum(case convert(varchar(10),PrintDate,120) when '''+dd+''' then Times else 0 end)'
-- 为什么是 @sql=@sql+? sum(case convert(varchar(10),PrintDate,120) when '''+dd+''' then Times else 0 end)就可以把PrintDate打横来摆放吗? 25分
from (select distinct dd=convert(varchar(10),PrintDate,120) from Table1)a
set @sql=@sql+' from Table1 group by Man' --在这里的第二个@sql是什么结果? 15分
exec(@sql)
得到了下面的结果:
Man2009/4/12009/4/32009/4/62009/5/52009/5/142009/7/22009/7/272009/8/182009/10/102009/10/292009/11/122009/12/1
方文祥000000010000
李林峰002000000000
周林江000100000000
周強000001200000
梅強020000000000
陳剛000010000100
陳華林000000000011
羅邦偉100000002000
我是新手,套用了网上的资料得到,但是对于那句SQL语句基本上不明白是什么意思。请高手解答,不胜感激!!
[解决办法]
declare @sql varchar(8000) --为什么要这么大? 5分--如果转换的字段很多,那么拼接出来的字符串会很长set @sql='select Man' --select Man 作为最左边的字段吗?为什么又来一次@sql? 15分--这个是为之后的拼接整体的语句准备的第一部分select @sql=@sql+',['+dd+']=sum(case convert(varchar(10),PrintDate,120) when '''+dd+''' then Times else 0 end)'-- 为什么是 @sql=@sql+? sum(case convert(varchar(10),PrintDate,120) when '''+dd+''' then Times else 0 end)就可以把PrintDate打横来摆放吗? 25分--这一不是为了循环凭借,把每一个出现的时间都用sum()里面的方法处理from (select distinct dd=convert(varchar(10),PrintDate,120) from Table1)aset @sql=@sql+' from Table1 group by Man' --在这里的第二个@sql是什么结果? 15分--这个拼接出来的就是整个查询语句,楼主打印出来看看print @sql,一切你都知道了exec(@sql)