将行组合为1并合计金额

时间:2014-02-20 15:58:50

标签: sql

我写了下面的剧本,但不幸的是已经卡住了。 目前它读取

SELECT dim1        AS Costc,
       period      AS Period,
       sum(actual) AS Beds,
       CASE
         WHEN measure LIKE 'beds%' THEN ISNULL(sum(actual), 0)
       END         AS BEDS,
       CASE
         WHEN measure LIKE 'occu%' THEN ISNULL (sum(actual), 0)
       END         AS OCCU,
       measure
FROM   statistics
WHERE  measure IN (SELECT measure
                   FROM   statistics
                   WHERE  measure LIKE 'beds%'
                           OR measure LIKE 'occu%')
       AND dim1 = 'ABC'
       AND period = '201301'
GROUP  BY period,
          dim1,
          measure 

其中 返回

COSTC | Period | Beds | BEDS | OCCU | Measure
 ABC  | 201301 |  40  |  40  | NULL | beds_abc
 ABC  | 201301 |  35  |  35  | NULL | beds_def
 ABC  | 201301 |  30  | NULL |  30  | occu_abc
 ABC  | 201301 |  20  | NULL |  20  | occu_def

我想要的输出是

COSTC | Period | BEDS | OCCU
 ABC  | 201301 |  75  |  50

任何帮助将不胜感激 感谢

1 个答案:

答案 0 :(得分:1)

这应该这样做。

measure移除GROUP BY,您需要将聚合移到CASE表达式之外

SELECT dim1                AS Costc,
       period              AS Period,
       sum(actual)         AS Beds,
       isnull(SUM(CASE
                    WHEN measure LIKE 'beds%' THEN actual
                  END), 0) AS BEDS,
       isnull(SUM(CASE
                    WHEN measure LIKE 'occu%' THEN actual
                  END), 0) AS OCCU
FROM   statistics
WHERE  measure IN (SELECT measure
                   FROM   cukstats
                   WHERE  measure LIKE 'beds%'
                           OR measure LIKE 'occu%')
       AND dim1 = 'ABC'
       AND period = '201301'
GROUP  BY period,
          dim1