2016-08-20 8 views
-4

これは私が持っている2つのテーブルです。各テーブルには1行以上を含むことがこれらの2つのテーブルをどのように結合する必要がありますか?

| StockId | Item1 | Quantity1 | Item2 | Quantity2 | 
     1  10  5   12  4 
     1  11  6   -  - 

| StockId | Item1 | Quantity1| 
    1  10  5 
    1  11  6 

| StockId | Item2 | Quantity2 | 
    1  12  4 

は、私は、出力を得るように、これらの2つのテーブルを結合する必要があります。私はテーブルを結合しようとしましたが、うまくいかないでしょう。

SELECT * FROM Table1 
INNER JOIN Table2 ON Table1.StockId = Table2.StockId 

これは私に出力を与える:

| StockId | Item1 | Quantity1 | Item2 | Quantity2 | 
     1  10  5   12  4 
     1  11  6   12  4 

答えて

1

あなたの条件ではないことは明らかであるので、それは、再思考を必要としますが、あなたはこのような何かでそれを行うことができますようにあなたのデータベースを検索します:

select * 
from 
(select row_number() over (order by Item1) as RN, * from Table1) T1 
full outer join 
(select row_number() over (order by Item2) as RN, * from Table2) T2 
on T1.RN = T2.RN 
2

@JamesZクエリを使用すると、アイテム1とアイテム2に基づいてRNを生成し、あなたがStockIdsを検討されていない2つのテーブルを結合しながらもStockIdを考慮されていません..以下のシナリオで失敗します。 以下の例では、クエリが正しい結果を返すように、さらに多くの行を追加しました。

CREATE TABLE #T1 (StockId INT ,Item1 INT,Quantity1 INT) 
CREATE TABLE #T2 (StockId INT ,Item2 INT,Quantity2 INT) 

INSERT INTO #T1 
SELECT 1,10,5 UNION ALL 
SELECT 1,11,6 UNION ALL 
SELECT 1,9 ,6 UNION ALL 
SELECT 1,8 ,6 UNION ALL 
SELECT 2,10,5 UNION ALL 
SELECT 2,11,6 

INSERT INTO #T2 
SELECT 1,12,4 UNION ALL 
SELECT 2,12,4 

;WITH T1 
AS 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY StockId ORDER BY Item1) AS RN, * 
    FROM #T1 
) 
,T2 
AS 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY StockId ORDER BY Item2) AS RN, * 
    FROM #T2 
) 
SELECT T1.StockId,T1.Item1,T1.Quantity1,T2.StockId,T2.Item2,T2.Quantity2 
FROM T1 
FULL JOIN T2 ON T1.StockId = T2.StockId AND T1.RN = T2.RN 
関連する問題