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

一位转二维的语句——求解,该如何解决

2012-05-30 
一位转二维的语句——求解数据库如下:IDManPrintDateTimes1羅邦偉2009/4/112梅強2009/4/323周林江2009/5/514

一位转二维的语句——求解
数据库如下:

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语句基本上不明白是什么意思。请高手解答,不胜感激!!



[解决办法]

SQL code
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) 

热点排行
Bad Request.