发个BT的SQL需求,大家看看有啥解决办法没
有这样一个数据表
USER_ID USER_DATANAME USER_DATAVALUE
A X 12
B X 23
C Z 34
B Y 45
A Z 12
C X 23
A Y 14
B z 98
c y 199
表名:TABLE
想输出为
USER_ID X Y Z
A 12 14 12
B 23 45 98
C 23 199 34
其中 X,Y ,Z 的个数是不定的,各位牛牛们看看,有用一条SQL命令实现的可能吗?
------解决方案--------------------一条
select USER_ID,
[X]=sum(case when USER_DATANAME= 'X ' then USER_DATAVALUE else 0 end),
[Y]=sum(case when USER_DATANAME= 'Y ' then USER_DATAVALUE else 0 end),
[Z]=sum(case when USER_DATANAME= 'Z ' then USER_DATAVALUE else 0 end)
from t
group by USER_ID
------解决方案--------------------使用動態SQL語句
Declare @S Varchar(8000)
Select @S = ' Select [USER_ID] '
Select @S = @S + ', SUM(Case USER_DATANAME When ' ' ' + USER_DATANAME + ' ' ' Then USER_DATAVALUE Else 0 End) As ' + USER_DATANAME
From [TABLE] Group By USER_DATANAME
Select @S = @S + ' From [TABLE] Group By [USER_ID] '
EXEC(@S)
------解决方案--------------------2005可以,2000不行