4

同じ定義を持つ 2 つのテーブルがあります。

T1:
Name VARCHAR(50)
Qty  INT

T2:
Name VARCHAR(50)
Qty  INT

これは、各テーブルに含まれるデータです。

T1:
Name   Qty
a   1
b   2
c   3
d   4

T2:
Name   Qty
a   1
b   3
e   5
f   10

名前に基づいて両方のテーブルから Qty を合計できる結果が必要です。

予想される結果セット:

Name    TotalQty
a             2
b             5
c             3
d             4
e             5
f            10

左結合または右結合を行うと、どちらのテーブルからも名前が返されません。

私が考えているのは、一時テーブルを作成してこれらのレコードを追加し、Qty 列で SUM 集計を行うことですが、これを行うにはもっと良い方法があるはずです。

これは、予想される結果セットを返さない私のクエリがどのように見えるかです:

SELECT t1.Name, ISNULL(SUM(t1.Qty + t2.Qty),0) TotalQty
FROM t1
LEFT JOIN t2
ON t1.Name = T2.Name
GROUP BY t1.Name

ここで一時テーブルを作成しても問題ないか、それとももっと良い方法があるか教えてください。

4

2 に答える 2

10

完全な外部結合を使用できます。

SELECT
    ISNULL(t1.Name, t2.Name) AS Name,
    ISNULL(t1.Qty, 0) + ISNULL(t2.Qty, 0) AS TotalQty
FROM t1
FULL JOIN t2 ON t1.Name = T2.Name

オンラインで動作することを確認してください:sqlfiddle

于 2012-09-07T19:18:20.277 に答える
7

定義が同じであるため、を使用しUNION ALLて両方のテーブルを1つとして選択できます。そこから、それらを派生テーブルとしてネストし、そのSUM上に次のようにネストできます。

SELECT [Name], SUM(Qty) AS TotalQty
FROM (
    SELECT [Name], Qty
    FROM t1
    UNION ALL
    SELECT [Name], Qty
    FROM t2
) YourDerivedTable
GROUP BY [Name]
于 2012-09-07T19:16:46.663 に答える