我写了下面的剧本,但不幸的是已经卡住了。 目前它读取
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
任何帮助将不胜感激 感谢
答案 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