2011-05-03 4 views
0

전에 Quassnoi에게 감사의 말을 전했습니다. 현재 코드 :계속 - SQL 쿼리의 다중 합

SELECT  i.CONCOM, COALESCE (SUM(t.LOGMINS), 0) AS TotalWithoutNew 
FROM   INQUIRY AS i INNER JOIN 
        TIMELOG AS t ON t.INQUIRY_ID = i.INQUIRY_ID INNER JOIN 
        PROD AS P ON i.PROD_ID = P.PROD_ID INNER JOIN 
        CATEGORY AS C ON P.CATEGORY_ID = C.CATEGORY_ID 
WHERE  (DATEPART(month, i.ESCDATE) = DATEPART(month, GETDATE()) - 1) AND (DATEPART(year, i.ESCDATE) = DATEPART(year, DATEADD(m, - 1, GETDATE()))) AND 
        (C.CATEGORY_ID <> '30') 
GROUP BY i.CONCOM 
ORDER BY TotalWithoutNew DESC 

이 내가 원하는 정확히 무엇을 찾아온다 (C.CATEGORY_ID <> 30) TotalWithoutNew로 표시 초기 컬럼에 포함되지 않습니다. 나는 또한 그것과 함께 가치를 필요로한다. TotalWithNew라는 다른 열에 모든 CATEGORY_ID가 포함되도록 할 수 있습니까? 나는 오늘 많은 새로운 쿼리 언어를 배웠다.

답변

2
SELECT  i.CONCOM, 
COALESCE (SUM(CASE WHEN C.CATEGORY_ID = '30' THEN 0 ELSE t.LOGMINS END), 0) AS TotalAllID, 
COALESCE (SUM(t.LOGMINS), 0) AS TotalWithoutNew 
FROM   INQUIRY AS i INNER JOIN 
        TIMELOG AS t ON t.INQUIRY_ID = i.INQUIRY_ID INNER JOIN 
        PROD AS P ON i.PROD_ID = P.PROD_ID INNER JOIN 
        CATEGORY AS C ON P.CATEGORY_ID = C.CATEGORY_ID 
WHERE  (DATEPART(month, i.ESCDATE) = DATEPART(month, GETDATE()) - 1) AND (DATEPART(year, i.ESCDATE) = DATEPART(year, DATEADD(m, - 1, GETDATE()))) 
GROUP BY i.CONCOM 
ORDER BY TotalWithoutNew DESC 

참고 : 시도하지는 않았지만 CASE WHEN ...을 사용하시기 바랍니다.

+1

그들이 카테고리 ID (30)에있을 경우, 0 값을 설정하는 CASE의 사용되는 트릭 (나는 그것이 코드에서 숨길보다는 일을 설명하기 위해 일반적으로 더 좋은 것 같아요.) – MatBailie

+0

일 위대하고, Dems에 대한 설명에 대해 고마워요. :) – Trinitrotoluene

0
SELECT i.CONCOM 
    , COALESCE(SUM(CASE WHEN C.CATEGORY_ID <> 30 THEN t.LOGMINS END), 0) 
     AS TotalWithoutNew 
    , COALESCE(SUM(t.LOGMINS), 0) AS TotalWithNew 
FROM INQUIRY AS i INNER JOIN 
    TIMELOG AS t ON t.INQUIRY_ID = i.INQUIRY_ID INNER JOIN 
    PROD AS P ON i.PROD_ID = P.PROD_ID INNER JOIN 
    CATEGORY AS C ON P.CATEGORY_ID = C.CATEGORY_ID 
WHERE (DATEPART(month, i.ESCDATE) = DATEPART(month, GETDATE()) - 1) 
AND (DATEPART(year, i.ESCDATE) = DATEPART(year, DATEADD(m, - 1, GETDATE()))) 
GROUP BY i.CONCOM 
ORDER BY TotalWithoutNew DESC