日期:2014-05-17  浏览次数:20814 次

求高手给一个sql语句 谢谢!
原表
id 所属门派 姓名 属性 属性值
1 武当 张三丰 悟性 252
5 武当 张三丰 体力 8
6 武当 张三丰 智力 8
7 武当 张三丰 精神 4
8 武当 张三丰 内力 2
10 武当 张三丰 运气 8
15 武当 张无忌 悟性 126
19 武当 张无忌 体力 12
20 武当 张无忌 智力 8
21 武当 张无忌 精神 9
22 武当 张无忌 内力 8
24 武当 张无忌 运气 16
29 武当 唐三 悟性 0
33 武当 唐三 体力 24
34 武当 唐三 智力 20
35 武当 唐三 精神 8
36 武当 唐三 内力 4
38 武当 唐三 运气 16
43 少林 海登 悟性 32
47 少林 海登 体力 2
48 少林 海登 智力 2
49 少林 海登 精神 0
50 少林 海登 内力 0
52 少林 海登 运气 4
57 少林 无名老僧 悟性 32
61 少林 无名老僧 体力 2
62 少林 无名老僧 智力 1
63 少林 无名老僧 精神 0
64 少林 无名老僧 内力 0
66 少林 无名老僧 运气 8
71 峨嵋 章子怡 悟性 32
75 峨嵋 章子怡 体力 3
76 峨嵋 章子怡 智力 0
77 峨嵋 章子怡 精神 0
78 峨嵋 章子怡 内力 0
80 峨嵋 章子怡 运气 4


求sql语句 使结果为

所属门派 悟性和 体力和 智力和 精神和 内力和 运气和
武当 378 44 36 21 14 40
少林 64 4 3 0 0 12
峨嵋 32 3 0 0 0 4


十分感谢

------解决方案--------------------
数据太多,我就不全造了。
CREATE TABLE tb (所属门派 VARCHAR(10),	姓名 VARCHAR(10),	属性 VARCHAR(10),	属性值 INT )
INSERT INTO TB
SELECT '武当', '张三丰', '悟性', 252
UNION ALL SELECT '武当', '张三丰', '体力', 8
UNION ALL SELECT '少林', '海登', '体力', 2
UNION ALL SELECT '少林', '海登', '悟性', 32

DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + 属性 + '和' + '=sum(case when [属性]='
        + QUOTENAME([属性], '''') + ' then [属性值] else 0 end)'
FROM    tb
GROUP BY 属性
EXEC('select [所属门派]'+@s+' from tb group by [所属门派]')

/*
所属门派       体力和         悟性和
---------- ----------- -----------
少林         2           32
武当         8           252

(2 行受影响)

*/