SQL文で2つのSELCT文の結果を繋げる方法はありますでしょうか。

ziria
2014-07-23 14:59 1481 1
SQL文で2つのSELCT文の結果を繋げる方法はありますでしょうか。
Left Join でもと思ったのですが、片側にしかないのも、1レコードとして出力したいです。
テーブルの例と出力の理想は以下です。

また、上記の応用でこれを4テーブル(SELECT文)を繋げて、下記例で言うと、日付と商品コードがキーで、どのテーブルに存在しても、結果を1行で返せるでしょうか。

【テーブル1(SELECT文1)】
F_仕入
伝票日付 商品コード 仕入金額
2014/07/01 101     10,000
2014/07/02 102     15,000
2014/07/05 104 20,000
【テーブル2(SELECT文2)】
F_売上
伝票日付 商品コード 売上金額
2014/07/01 101     15,000
2014/07/02 102     25,000
2014/07/03 103 13,000
上記2つのSELECT結果
伝票日付  商品コード 仕入金額 売上金額
2014/07/01 101 10,000 15,000
2014/07/02 102 15000 25,000
2014/07/03 103 13,000
2014/07/05 104 20,000

よろしくお願いします。

コメント

2014年 07月 23日 (19:18)
こんにちは。
イノ(inno)です。

FULL OUTER JOIN を使えばできます。
下記の例文を作成しましたので、ご確認ください。

-- #### テーブル作成
CREATE TABLE dbo.Table1
(
LogDate datetime
, ItemID int
, Amount money
)

-- #### データ登録
INSERT INTO dbo.Table1 (LogDate, ItemID, Amount) VALUES ('2014/07/01', 101, 10000)
INSERT INTO dbo.Table1 (LogDate, ItemID, Amount) VALUES ('2014/07/02', 102, 15000)
INSERT INTO dbo.Table1 (LogDate, ItemID, Amount) VALUES ('2014/07/05', 104, 20000)

-- #### テーブル作成
CREATE TABLE dbo.Table2
(
LogDate datetime
, ItemID int
, Amount money
)

-- #### データ登録
INSERT INTO dbo.Table2 (LogDate, ItemID, Amount) VALUES ('2014/07/01', 101, 15000)
INSERT INTO dbo.Table2 (LogDate, ItemID, Amount) VALUES ('2014/07/02', 102, 25000)
INSERT INTO dbo.Table2 (LogDate, ItemID, Amount) VALUES ('2014/07/03', 103, 13000)

-- #### 結果SQL
SELECT ISNULL(A.LogDate, B.LogDate) AS LogDate
, ISNULL(A.ItemID, B.ItemID) AS ItemID
, A.Amount, B.Amount
FROM dbo.Table1 A FULL OUTER JOIN dbo.Table2 B
ON A.LogDate = B.LogDate AND A.ItemID = B.ItemID
ORDER BY LogDate, ItemID

-- #### 実行結果
LogDate ItemID Amount Amount
----------------------- ----------- --------------------- ---------------------
2014-07-01 00:00:00.000 101 10000.00 15000.00
2014-07-02 00:00:00.000 102 15000.00 25000.00
2014-07-03 00:00:00.000 103 NULL 13000.00
2014-07-05 00:00:00.000 104 20000.00 NULL