2014-02-20 6 views
1

다음 스크립트를 작성했지만 불행히도 막혔습니다. 현재는행을 1로 합치고 금액을 합계

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

이 그것을해야을 감상 할 수있다.

GROUP BY에서 measure를 제거하고 당신은 CASE 표현

사용중인 DBMS
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 
+0

"measure"가 그룹의 일부가 아닌 경우 선택 목록에있을 수 없습니다. – bleeeah

+0

@bleeeah -'SELECT'리스트에 없습니다. 집합체 안에 있습니다. 이것은 일반적인'PIVOT' 방식입니다. –

+0

BEDS와 OCCU는 괜찮습니다.하지만 여전히 반환되는 마지막 열입니다. – bleeeah

관련 문제