2015-01-26 4 views
1

하나의 전체 쿼리로 두 개의 쿼리를 병합하려고합니다. 하나의 집계 필드 (MFG)에 그룹화하려면 두 개의 쿼리가 필요합니다. 나는 당신이 JOIN을 사용한다고 가정 할 것이지만, 같은 테이블에 있고 CASE과 함께 사용하면 어떻게 작동하는지 모르겠습니다.MySQL이 하나의 테이블에 CASE를 사용하여 두 개의 SELECT 쿼리를 병합했습니다.

1ST QUERY (2015)

SELECT 
    CASE 
     WHEN ITEM LIKE '%1%' THEN 'MFG1' 
     WHEN ITEM LIKE '%2%' THEN 'MFG2' 
     WHEN ITEM LIKE '%3%' THEN 'MFG3' 
     ELSE '' 
    END AS MFG, 
    SUM(COST) AS Cost2015 
FROM 
    table 
WHERE 
    TRANS_DATE BETWEEN '2015-12-01' AND '2015-12-31' 
GROUP BY MFG 

2ND QUERY (2014)

SELECT 
    CASE 
     WHEN ITEM LIKE '%1%' THEN 'MFG1' 
     WHEN ITEM LIKE '%2%' THEN 'MFG2' 
     WHEN ITEM LIKE '%3%' THEN 'MFG3' 
     ELSE '' 
    END AS MFG, 
    SUM(COST) AS Cost2014 
FROM 
    table 
WHERE 
    TRANS_DATE BETWEEN '2014-12-01' AND '2014-12-31' 
GROUP BY MFG 

원하는 결과

MFG | Cost2015 | Cost2014 
MFG1 | 1500  |  0 
MFG2 | 1000  | 1200 
MFG3 |  0  | 3600 
    | 100  |  15 

답변

1

당신을 C SUM()

SELECT 
    CASE 
     WHEN ITEM LIKE '%1%' THEN 'MFG1' 
     WHEN ITEM LIKE '%2%' THEN 'MFG2' 
     WHEN ITEM LIKE '%3%' THEN 'MFG3' 
     ELSE '' 
    END AS MFG, 
    SUM(CASE WHEN TRANS_DATE BETWEEN '2014-12-01' AND '2014-12-31' THEN COST ELSE 0 END) AS Cost2014, 
    SUM(CASE WHEN TRANS_DATE BETWEEN '2015-12-01' AND '2015-12-31' THEN COST ELSE 0 END) AS Cost2015 
FROM 
    TABLE 
WHERE 
    TRANS_DATE BETWEEN '2014-12-01' AND '2015-12-31' 
GROUP BY MFG 
+0

에 사용 CASE이는 내가 처음 몇 작업 것으로 보인다 감사합니다, 내가 수락하기 전에 좀 더 테스트를 실행할 수 있습니다. – ToddN

관련 문제