求高手帮忙看一下这条SQL语句应该如何改写呢?谢谢!
本帖最后由 limx001 于 2014-05-07 12:07:11 编辑
原始表结构为:
A01 A02 A03 A04 A05 A06 A07 A08 A09
同意 不同意 ...
不同意 同意
同意 非常不同意
同意 不同意
一般 同意
要求变为:
CNO 非常同意 同意 一般 不同意 非常不同意
A01 5 10 3 4 2
A02 2 12 4 0 0
A03 ... ...
A04
A05
A06
A07
A08
A09
我是这样写:
declare @i int
set @i=1
while @i<10
begin
insert into testTotal(CNO,Genok,VYes,Yes,NNo,VNO)
select a.[A0+cast(@i as nvarchar(1)],
sum(a.一般) as 一般,sum(a.非常同意) as 非常同意,sum(a.同意) as 同意,
sum(a.不同意) as 不同意,sum(非常不同意) as 非常不同意
from (select 'A0'@i as a0@i,sum(iif(A0@i='一般',1,0)) as 一般,
sum(iif(A0@i='非常同意',1,0)) as 非常同意,
sum(iif(A0@i='同意',1,0)) as 同意,
sum(iif(A0@i='不同意',1,0)) as 不同意,
sum(iif(A0@i='非常不同意',1,0)) as 非常不同意
from testtable group by A0@i ) a group by a.A0@i
set @i=@i+1
end
上面出错总是在 @i , 也没有 a.[A0+...] 的这样搞法,但不知如何改,求高手指点,谢谢!
------解决方案--------------------declare @i int
set @i=1
declare @s varchar(8000)
set @s=''
while @i<10
begin
set @s=@s+'
insert into testTotal(CNO,Genok,VYes,Yes,NNo,VNO)
select a.[A0'+cast(@i as nvarchar(1))+'],
sum(a.一般) as 一般,sum(a.非常同意) as 非常同意,sum(a.同意) as 同意,
sum(a.不同意) as 不同意,sum(非常不同意) as 非常不同意
from (select ''A0'+cast(@i as nvarchar(1))+' as a0@i,sum(iif(A0'+cast(@i as nvarchar(1))+'=''一般'',1,0)) as 一般,
sum(iif(A0'+cast(@i as nvarchar(1))+'=''非常同意'',1,0)) as 非常同意,
sum(iif(A0'+cast(@i as nvarchar(1))+'=''同意'',1,0)) as 同意,
sum(iif(A0'+cast(@i as nvarchar(1))+'=''不同意'',1,0)) as 不同意,
sum(iif(A0'+cast(@i as nvarchar(1))+'=''非常不同意'',1,0)) as 非常不同意
from testtable group by A0'+cast(@i as nvarchar(1))+' ) a group by a.A0@i'
set @i=@i+1
end
print @s
------解决方案--------------------别名是不能作为分组条件的 'A0'+cast(@i as nvarchar(1) 本来这是没问题的 但是你到后面就一律用别名了