문제

두 개의 테이블이 있다고 가정해 보겠습니다.

알려진 시간:

ChargeNum    CategoryID    Month    Hours
111111       1             2/1/09   10
111111       1             3/1/09   30
111111       1             4/1/09   50
222222       1             3/1/09   40
111111       2             4/1/09   50

알 수 없음시간:

ChargeNum   Month   Hours
111111      2/1/09  70
111111      3/1/09  40.5
222222      7/1/09  25.5

예상 결과가 다음과 같도록 월을 무시하고 이러한 시간을 단일 데이터 테이블로 그룹화해야 합니다.

ChargeNum    CategoryID     Hours
111111       1              90
111111       2              50
111111       Unknown        110.5
222222       1              40
222222       Unknown        25.5

나는 이것을 알아낼 수없는 것 같습니다.어떤 도움이라도 대단히 감사하겠습니다!

편집하다:각 ChargeNum/Category 조합의 시간을 합산해야 합니다.이를 반영하기 위해 샘플 데이터를 업데이트했습니다.

도움이 되었습니까?

해결책

사용해야합니다 UNION 두 쿼리의 결과를 결합합니다. 귀하의 경우 :

SELECT ChargeNum, CategoryID, SUM(Hours)
FROM KnownHours
GROUP BY ChargeNum, CategoryID
UNION ALL
SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours)
FROM UnknownHours
GROUP BY ChargeNum

참고 - 사용하는 경우 UNION ALL 위에서와 같이, 두 쿼리를 개별적으로 실행하는 것보다 느리지 않습니다.

다른 팁

예상 출력에서 ​​마지막 두 번째 행 합계가 잘못되었습니다. 테이블의 데이터에 따르면 40이어야 하지만 쿼리는 다음과 같습니다.

Select  ChargeNum, CategoryId, Sum(Hours)
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

결과는 다음과 같습니다.

ChargeNum  CategoryId 
---------- ---------- ----------------------
111111     1          40
111111     2          50
111111     Unknown    70
222222     1          40
222222     Unknown    25.5

우리는 이것을 한 걸음 더 멀리 가져 가서 50 시간 이상이 결합 될 때만 줄 만보고 싶다고 말할 수 있습니까?

Select  ChargeNum, CategoryId, Sum(Hours) As SumHours
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
WHERE (SumHours>=50)
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

그래서 나는 시도했다

    Select  ChargeNum, CategoryId, Sum(Hours) As SumHours
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
WHERE (Hours>=50)
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

그러나 이것은 두 테이블에 시간의 합을주지 않습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top