2012-05-11 14 views
1

解決したい問題を簡潔に説明する方法がわかりません。
私は2つの以下のテーブルを持っている:異なる名前の列にテーブルを結合しても、結果に単一の列が生成される

[id] [numA] [numB] 
NULL 8  0 
1  10  0 
2  15  14 
3  16  30 
4  0  32 

Table 1

[idA] [numA] 
NULL 8 
1  10 
2  15 
3  16 

Table 2

[idB] [numB] 
2  14 
3  30 
4  32 

、私は次のような結果を生成するためにT-SQLクエリを定式化するかどうかはわかりません

これを解決する方法はありますか?

UPDATE:参加する1つの以上のテーブル(IDC、NUMC)があった場合


は、@ AdaTheDevのスクリプトに問題があるでしょうか?その場合、何が最善の解決策になるでしょうか? 1つのテーブルに結合するための15個のテーブルがあり、IDでグループ化し、対応するnumXの列を15個持つ必要があります。

+0

テーブルが非常に多い場合やテーブルの数がわからない場合は、SQLクエリ –

答えて

4

何かが、私はIDAとIDBがNULLの場合に対処するために参加したり、条件を追加したことが

SELECT ISNULL(t1.idA, t2.idB) AS id, 
    ISNULL(t1.numA, 0) AS numA, 
    ISNULL(t2.NumB, 0) AS numB 
FROM table1 t1 
    FULL OUTER JOIN table2 t2 ON t1.idA = t2.idB OR t1.ida IS NULL AND t2.idb IS NULL 

更新
注意を行う必要があり、与えるために単一の結果

フルテストスクリプト(テーブル2にNULL IDレコードが追加されています):

DECLARE @Table1 TABLE (ida integer, numA INTEGER) 
DECLARE @Table2 TABLE (idb integer, numb INTEGER) 

INSERT @Table1 ([ida], [numA]) 
VALUES (NULL, 8), (1, 10), (2, 15), (3, 16) 

INSERT @Table2 ([idb], [numb]) 
VALUES (NULL, 9), (2, 14), (3, 30), (4, 32) 

SELECT ISNULL(t1.idA, t2.idB) AS id, 
    ISNULL(t1.numA, 0) AS numA, 
    ISNULL(t2.NumB, 0) AS numB 
FROM @table1 t1 
    FULL OUTER JOIN @table2 t2 ON t1.idA = t2.idB OR t1.ida IS NULL AND t2.idb IS NULL 
+0

+1:私は個人的に常にboolenaロジックの明示的な中カッコを使います。私のことを止めるのを止めるだけでなく、読んでいるときの誤解を止めるために。 – MatBailie

+0

参加するもう1つのテーブル(idC、numC)がある場合、このスクリプトに問題はありますか? 1つのテーブルに結合するための15個のテーブルがあり、IDでグループ化し、対応するnumXの列を15個持つ必要があります。 –

0

これはあなたの後のことですか?このような

select tableA.idA as Id, tableA.numA as numA, tableB.numB as numB 
from tableA 
inner join tableB on tableA.Id = tableB.Id 
+0

を使用して解決できないデータベース設計に問題がある可能性がありますテーブルAと一致する行がない場合、numBはデフォルトで0になっていなければなりません。 – gcbenison

1
DECLARE @table1 AS TABLE (idA INT, numA INT) 
DECLARE @table2 AS TABLE (idB INT, numB INT) 

INSERT INTO @table1 
VALUES 
(NULL, 8), 
(1, 10), 
(2, 15), 
(3, 16) 

INSERT INTO @table2 
VALUES 
(2, 14), 
(3, 30), 
(4, 32) 


SELECT COALESCE(ida, idb) AS id, ISNULL(numa, 0) AS numa, ISNULL(numb, 0) AS numb 
FROM @table1 
FULL OUTER JOIN @table2 ON ida = idb 
関連する問題