日期:2014-05-19  浏览次数:20765 次

发个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不行