这条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句了吗?
这下明白了吗?