データベース(SQL)初心者の学生です。良いSQLをご教示ください。

カオスシグ
2013-10-02 00:42 2071 1
データベース(SQL)初心者の学生です。
下記のテーブル(テーブル1、テーブル2、テーブル3)を使用して、次のような結果を求めたいのですが、
記述すべきSQL<select文>に悩んでおります。
どのような結合でも、selectでcol1を特定するといずれかのテーブル内容が欠落してしまうところで躓いております。

どなたか、良いSQLをご教示ください。
使用しているDBはSQLServer2008です。
よろしくお願い申し上げます。


テーブル1
col1 col2
---- ----
1 1

テーブル2
col1 col3
---- ----
1 10

テーブル3
col1 col4
---- ----
2 100


求めたい結果
col1 col2 col3 col4 
---- ---- ---- ----
1 1 10 NULL
2 NULL NULL 100

コメント

2013年 10月 02日 (14:47)
こんにちは。
イノ(inno)です。

下記のようにすればできます。
テストの為にテーブル作成からSQLを作成しましたので、
下記のSQLでご確認をお願い致します。

-- #### テーブル作成
CREATE TABLE #Table1
(
col1 int,
col2 int
)
GO

CREATE TABLE #Table2
(
col1 int,
col3 int
)
GO

CREATE TABLE #Table3
(
col1 int,
col4 int
)
GO

-- #### テストデータを登録
INSERT INTO #Table1 (col1, col2)
VALUES (1, 1)
GO
INSERT INTO #Table2 (col1, col3)
VALUES (1, 10)
GO
INSERT INTO #Table3 (col1, col4)
VALUES (2, 100)
GO

-- #### 結果SQL

SELECT
col1
, MAX(CASE WHEN Code = 1 THEN col2 ELSE Null END) AS col2
, MAX(CASE WHEN Code = 2 THEN col2 ELSE Null END) AS col3
, MAX(CASE WHEN Code = 3 THEN col2 ELSE Null END) AS col4
FROM
(
SELECT 1 Code, * FROM #Table1 UNION ALL
SELECT 2 Code, * FROM #Table2 UNION ALL
SELECT 3 Code, * FROM #Table3
) A
GROUP BY col1

もしくは下記のようなSQLでもできます。

SELECT col1
, MAX(col2) AS col2
, MAX(col3) AS col3
, MAX(col4) AS col4
FROM
(
SELECT col1, col2, null AS col3, null AS col4 FROM #Table1 UNION ALL
SELECT col1, null AS col2, col3, null AS col4 FROM #Table2 UNION ALL
SELECT col1, null AS col2, null AS col3, col4 FROM #Table3
) A
GROUP BY col1

-- #### 実行結果
col1 col2 col3 col4
1 1 10 NULL
2 NULL NULL 100