当前位置: 代码迷 >> Sql Server >> SQL语句,高分待.
  详细解决方案

SQL语句,高分待.

热度:68   发布时间:2016-04-27 10:46:21.0
SQL语句,高分在线等待....
Name FileName UserID FileId Score Num Optiones
  李斯 百草园到三味书屋(45人听课) 100 102 30 6 A
李斯 百草园到三味书屋(45人听课) 100 102 4 1 B
李斯 百草园到三味书屋(45人听课) 100 102 3 1 C
李斯 百草园到三味书屋(45人听课) 100 102 6 3 D
王蒙 五柳先生自传(语文) 102 104 5 1 A
王蒙 五柳先生自传(语文) 102 104 9 3 C
立国 百草园到三味书屋(45人听课) 100 108 5 1 A
立国 百草园到三味书屋(45人听课) 100 108 4 1 B
立国 百草园到三味书屋(45人听课) 100 108 3 1 C
立国 百草园到三味书屋(45人听课) 100 108 4 2 D

需要的  
 Name FileName UserID FileId Score(sum) A B C D
李斯 百草园到三味书屋(45人听课) 100 102 43 6 1 1 3  
王蒙 五柳先生自传(语文) 102 104 14 1 0 3 0
立国 百草园到三味书屋(45人听课) 100 108 16 1 1 1 2


求SQL语句,



------解决方案--------------------
SQL code
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 行受影响) */
------解决方案--------------------
SQL code
--> 测试数据:[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*/
  相关解决方案