日期:2014-05-18  浏览次数:20531 次

这条sql是怎么工作的?
CREATE   TABLE   [Test]   (
[id]   [int]   IDENTITY   (1,   1)   NOT   NULL   ,
[name]   [nvarchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,
[subject]   [nvarchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NULL   ,
[score]   [numeric](18,   0)   NULL   ,
CONSTRAINT   [PK_ID]   PRIMARY   KEY     CLUSTERED  
(
[id]
)     ON   [PRIMARY]  
)   ON   [PRIMARY]
GO

insert   into   test([name],[subject],[score])   values( '张三 ', '语文 ',60)
insert   into   test([name],[subject],[score])   values( '张三 ', '数学 ',76)
insert   into   test([name],[subject],[score])   values( '张三 ', '英语 ',80)

insert   into   test([name],[subject],[score])   values( '李四 ', '语文 ',90)
insert   into   test([name],[subject],[score])   values( '李四 ', '数学 ',88)
insert   into   test([name],[subject],[score])   values( '李四 ', '英语 ',50)


declare   @sql   nvarchar(4000)
select   @sql= 'select   name, '
select   @sql=@sql+ 'sum(case   subject   when   ' ' '+subject+ ' ' '
then   score   else   0   end)   as   ' ' '+subject+ ' ' ', '
from   (select   distinct   subject   from   test)   as   a

print   @sql

为什么这条语句..能够输出
select   name,sum(case   subject   when   '数学 '
then   score   else   0   end)   as   '数学 ',sum(case   subject   when   '英语 '
then   score   else   0   end)   as   '英语 ',sum(case   subject   when   '语文 '
then   score   else   0   end)   as   '语文 ',

这样?它是怎么工作的?

------解决方案--------------------
select @sql=@sql+ 'sum(case subject when ' ' '+subject+ ' ' '
~~~~~~看这里

用表a里的subject字段里的值替换我划线的部分
对每个字段都作一次,不是就有3句了吗?
这下明白了吗?