복붙노트

[SQL] 하나 개의 출력을위한 두 개의 테이블을 결합

SQL

하나 개의 출력을위한 두 개의 테이블을 결합

나는 두 개의 테이블을 가지고 말 :

KnownHours :

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

UnknownHours :

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 / 분류 조합에 대한 시간을 합계해야합니다. 나는 이것을 반영하기 위해 샘플 데이터를 업데이트했습니다.

해결법

  1. ==============================

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

    두 쿼리의 결과를 결합하는 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을 사용하는 경우 더 느린가 중복 검사를하지 않습니다 별도로 두 개의 쿼리를 실행하는 것보다입니다.

  2. ==============================

    2.당신의 예상 출력에서 ​​두 번째 마지막 행의 합이 잘못된있어, 당신의 테이블의 데이터에 따라 40 수 있지만 여기에 쿼리입니다한다 :

    당신의 예상 출력에서 ​​두 번째 마지막 행의 합이 잘못된있어, 당신의 테이블의 데이터에 따라 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
    
  3. ==============================

    3.우리는 단계 더 이것을 가지고 내가 50 시간이 이상 ... 나는이 시도했다가 결합 될 때 행을 참조하고 싶은 말은하지만 SumHours를 찾을 수 없다는 오류를받을 수 ...

    우리는 단계 더 이것을 가지고 내가 50 시간이 이상 ... 나는이 시도했다가 결합 될 때 행을 참조하고 싶은 말은하지만 SumHours를 찾을 수 없다는 오류를받을 수 ...

    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
    

    하지만이 두 테이블에 시간의 합계를 제공하지 않습니다 ...

  4. from https://stackoverflow.com/questions/1227835/combine-two-tables-for-one-output by cc-by-sa and MIT license