質問

2つのテーブルがあるとします:

既知の時間:

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

月を無視してこれらの時間を1つのデータテーブルにグループ化する必要があるため、予想される結果は次のようになります。

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

これを理解できないようです。どんな助けも大歓迎です!

編集:各ChargeNum / Categoryの組み合わせの時間を合計する必要があります。これを反映するようにサンプルデータを更新しました。

役に立ちましたか?

解決

2つのクエリの結果を結合するには、 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になるはずですが、クエリは次のとおりです。

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時間以上の行だけを見たいと言うことができますか...私はこれを試しましたが、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

ただし、これは両方のテーブルの時間の合計を示していません...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top