2016-07-31 10 views
0

私は以下のようにSQL Serverテーブルを用意しており、以下のような結果を得るためにjoinを実行する必要があります。SQL Server:クロステーブルの結合方法

Custorder

製造
itemcode orderqty 
------------------- 
item001  10 
item003  30 
item004  50 

itemcode manuqty 
-------------------- 
item001  100 
item002  200 
item004  300 

にはどうすれば

itemcode orderqty manuqty 
--------------------------------- 
item001  10   100 
item002  NULL  200 
item003  30   NULL 
item004  50   300 

は、任意の助けに感謝生成するために、これらの2つのテーブルを結合することができます。

答えて

1

まず、DBコミュニティでは、「デカルト積」と呼ばれるものを生成する結合を参照するために、「クロス結合」というフレーズが使用されます。例えば、アルファベット自体と相互参加のためのAAを生成する、AB、AC、AD ... AZ、BA、BB、BC、など

何がしたいことは普通の加入されています

Select coalesce(co.itemcode, m.itemcode) itemCode, 
    co.orderqty, m.manuqty 
From custorder co 
    full join manufactured m 
     on m.itemcode = co.itemcode 
+0

定期的に参加することは、私がテストした 'manufactured' – JamieD77

+0

@Charless Bretanaから' item002'は含まれませんコードはitem001 10 100とitem004 50 300を与えるだけで、他の2つの項目は欠けています – Jackie

+0

外部結合が必要です。この場合はful l' [外側] 'join'。修正のために私の答えを編集しました。 –

4

これに対して完全外部結合を使用できます。

SELECT ISNULL(co.itemcode, ma.itemcode) itemcode , 
     orderqty , 
     manuqty 
FROM custorder co 
     FULL OUTER JOIN manufactured ma ON co.itemcode = ma.itemcode 

あなたが持っている別のオプションを使用すると、レコードの多くを持っている場合、これは非常に遅いクエリにつながる可能性が..両方のテーブルからあなたitemcodeリストを作成し、あなたの結果を得るためにそれに参加するためにクエリを使用することです。 。理想的にはあなたがinventory (itemid int, itemcode varchar)に似たテーブルを持っているでしょうし、あなたが他の人に参加し、外にそのテーブルを使用します。..

;WITH items AS (
    --get distinct itemcodes from both tables 
    SELECT itemcode FROM custorder 
    UNION 
    SELECT itemcode FROM manufactured 
) 
SELECT i.itemcode, 
     co.orderqty, 
     ma.manuqty 
FROM custorder co 
     RIGHT OUTER JOIN items i ON i.itemcode = co.itemcode 
     LEFT OUTER JOIN manufactured ma ON i.itemcode = ma.itemcode