SQL语句,高分在线等待....
Name FileName UserID FileId Score Num Optiones
李斯百草园到三味书屋(45人听课)100102306A
李斯百草园到三味书屋(45人听课)10010241B
李斯百草园到三味书屋(45人听课)10010231C
李斯百草园到三味书屋(45人听课)10010263D
王蒙五柳先生自传(语文) 102 10451A
王蒙五柳先生自传(语文) 10210493C
立国百草园到三味书屋(45人听课)10010851A
立国百草园到三味书屋(45人听课)10010841B
立国百草园到三味书屋(45人听课)10010831C
立国百草园到三味书屋(45人听课)10010842D
需要的
Name FileName UserID FileId Score(sum) A B C D
李斯百草园到三味书屋(45人听课)100102436 1 1 3
王蒙五柳先生自传(语文) 102 104141 0 3 0
立国百草园到三味书屋(45人听课)100108161 1 1 2
求SQL语句,
[解决办法]
WITH test (NAME, FileName ,UserID ,FileId, Score, Num ,Optiones) AS ( select '李斯', '百草园到三味书屋(45人听课)', 100, 102, 30, 6, 'A' UNION ALL select '李斯', '百草园到三味书屋(45人听课)', 100, 102, 4, 1, 'B' UNION ALL select '李斯', '百草园到三味书屋(45人听课)', 100, 102, 3, 1, 'C' UNION ALL select '李斯', '百草园到三味书屋(45人听课)', 100, 102, 6, 3, 'D' UNION ALL select '王蒙', '五柳先生自传(语文)', 102, 104, 5, 1, 'A' UNION ALL select '王蒙', '五柳先生自传(语文)', 102, 104, 9, 3, 'C' UNION ALL select '立国', '百草园到三味书屋(45人听课)', 100, 108, 5, 1, 'A' UNION ALL select '立国', '百草园到三味书屋(45人听课)', 100, 108, 4, 1, 'B' UNION ALL select '立国', '百草园到三味书屋(45人听课)', 100, 108, 3, 1, 'C' UNION ALL select '立国', '百草园到三味书屋(45人听课)', 100, 108, 4, 2, 'D' ) SELECT NAME, FileName ,UserID ,FileId,SUM(Score)AS 'scroe(SUM)',ISNULL(SUM(CASE WHEN Optiones='A' THEN num END),0) [A] , ISNULL(SUM(CASE WHEN Optiones='b' THEN num END),0) [b] , ISNULL(SUM(CASE WHEN Optiones='c' THEN num END),0) [c] , ISNULL(SUM(CASE WHEN Optiones='d' THEN num END),0) [D] FROM test GROUP BY NAME, FileName ,UserID ,FileId /* NAME FileName UserID FileId scroe(SUM) A b c D ---- -------------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 李斯 百草园到三味书屋(45人听课) 100 102 43 6 1 1 3 立国 百草园到三味书屋(45人听课) 100 108 16 1 1 1 2 王蒙 五柳先生自传(语文) 102 104 14 1 0 3 0 警告: 聚合或其他 SET 操作消除了 Null 值。 (3 行受影响) */
[解决办法]
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([Name] VARCHAR(4),[FileName] VARCHAR(26),[UserID] INT,[FileId] INT,[Score] INT,[Num] INT,[Optiones] VARCHAR(1))INSERT [tb]SELECT '李斯','百草园到三味书屋(45人听课)',100,102,30,6,'A' UNION ALLSELECT '李斯','百草园到三味书屋(45人听课)',100,102,4,1,'B' UNION ALLSELECT '李斯','百草园到三味书屋(45人听课)',100,102,3,1,'C' UNION ALLSELECT '李斯','百草园到三味书屋(45人听课)',100,102,6,3,'D' UNION ALLSELECT '王蒙','五柳先生自传(语文)',102,104,5,1,'A' UNION ALLSELECT '王蒙','五柳先生自传(语文)',102,104,9,3,'C' UNION ALLSELECT '立国','百草园到三味书屋(45人听课)',100,108,5,1,'A' UNION ALLSELECT '立国','百草园到三味书屋(45人听课)',100,108,4,1,'B' UNION ALLSELECT '立国','百草园到三味书屋(45人听课)',100,108,3,1,'C' UNION ALLSELECT '立国','百草园到三味书屋(45人听课)',100,108,4,2,'D'--------------开始查询--------------------------SELECT * FROM (SELECT [Name],[FileName],[UserID],[FileId],[SUMScore],[Num],[Optiones] FROM [tb] AS tCROSS APPLY(SELECT [SUMScore]=SUM([Score]) FROM tb WHERE [Name]=t.[Name] AND [FileName]=t.[FileName]) app) t PIVOT (MAX([Num]) FOR [Optiones]IN ([A],[B],[C],[D])) piv----------------结果----------------------------/* Name FileName UserID FileId SUMScore A B C D李斯 百草园到三味书屋(45人听课) 100 102 43 6 1 1 3立国 百草园到三味书屋(45人听课) 100 108 16 1 1 1 2王蒙 五柳先生自传(语文) 102 104 14 1 NULL 3 NULL*/