Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将行转换为列并计算总和_Sql_Db2_Db2 400 - Fatal编程技术网

Sql 将行转换为列并计算总和

Sql 将行转换为列并计算总和,sql,db2,db2-400,Sql,Db2,Db2 400,我有这个 我想要这个 但是我得到了这个 我的问题是 SELECT SID, NAME, SUBJECT, ( CASE WHEN EXAMTYPE IN ('ASSIGNMENTS', 'PRACTICAL') THEN SUM(MARKS) ELSE 0 E

我有这个

我想要这个

但是我得到了这个

我的问题是

SELECT   SID, 
         NAME, 
         SUBJECT, ( 
         CASE 
                  WHEN EXAMTYPE IN ('ASSIGNMENTS', 
                                    'PRACTICAL') THEN SUM(MARKS) 
                  ELSE 0 
         END) AS "ASSIGNMENTS + PRACTICAL", ( 
         CASE 
                  WHEN EXAMTYPE = 'WRITTEN' THEN SUM(MARKS) 
                  ELSE 0 
         END) AS "WRITTEN"
FROM     MARKSHEET 
WHERE    EXAMTYPE IN ('ASSIGNMENTS', 
                      'PRACTICAL', 
                      'WRITTEN') 
GROUP BY SID, 
         NAME, 
         SUBJECT, 
         EXAMTYPE
我正在使用IBMDB2。
我将永远感激任何/所有的帮助。谢谢大家!

您需要将case表达式放在sum()中,比如
sum(case when…)
另外,从
group by子句中删除
examType
字段

SELECT   SID, 
         NAME, 
         SUBJECT, sum( 
         CASE 
                  WHEN EXAMTYPE IN ('ASSIGNMENTS', 
                                    'PRACTICAL') THEN MARKS 
                  ELSE 0 
         END) AS "ASSIGNMENTS + PRACTICAL", ( 
         sum(CASE 
                  WHEN EXAMTYPE = 'WRITTEN' THEN MARKS
                  ELSE 0 
         END) AS "WRITTEN"
FROM     MARKSHEET 
WHERE    EXAMTYPE IN ('ASSIGNMENTS', 'PRACTICAL', 'WRITTEN') 
GROUP BY SID, NAME, SUBJECT