2013-08-01 31 views
1

我有兩個表,我們稱之爲一個Items和一個Inventory使用SQL Server,顯示一些列作爲附加行

items表具有用於item#一列,然後3列配件,ACC1ACC2ACC3inventory表格有item#和數量。

我想能夠顯示此爲:

item#A Acc1 qtyonhand 
item#A Acc2 qtyonhand 
item#A Acc3 qtyonhand 
item#B Acc1 qtyonhand 

使每一行會的項目和獨特的配件。如果Acc1,2或3列爲空,則不應顯示該行。

我該如何在SQL中編寫這個?爲了獲得這些確切的結果,我沒有做任何嘗試。

在此先感謝!

回答

0

用簡單的方式是使用一個UNION:

SELECT i.[item#], ACC1 AS ACC, [quantity on hand] 
FROM items i 
INNER JOIN inventory inv ON i.[item#] = inv.[item#] 
WHERE ACC1 IS NOT NULL 
UNION ALL 
SELECT i.[item#], ACC2 AS ACC, [quantity on hand] 
FROM items i 
INNER JOIN inventory inv ON i.[item#] = inv.[item#] 
WHERE ACC2 IS NOT NULL 
UNION ALL 
SELECT i.[item#], ACC3 AS ACC, [quantity on hand] 
FROM items i 
INNER JOIN inventory inv ON i.[item#] = inv.[item#] 
WHERE ACC3 IS NOT NULL 
+0

這似乎是,當有喜歡的UNPIVOT HTTP指令蠻力方法:/ /msdn.microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx –

+0

謝謝,這個工作,但我確實想知道更多關於UNPIVOT optoon – user2642976

1

您只需要使用UNPIVOT

BEGIN 
DECLARE @tbl1 as TABLE(num INT, a1 VARCHAR(16), a2 VARCHAR(16), a3 VARCHAR(16)) 
DECLARE @tbl2 as TABLE(num INT, qty INT) 
INSERT INTO @tbl1 VALUES (1, 'a1', 'b1', 'c1'),(2, null, 'b2', null),(3, 'a3', 'b3', 'c3') 
INSERT INTO @tbl2 VALUES (1, 5), (2, 10), (3, 7) 

SELECT num, acc [acc], qty FROM (
    SELECT a.num, a.a1, a.a2, a.a3, b.qty FROM @tbl1 a 
    LEFT JOIN @tbl2 b ON a.num = b.num 
) t1 
UNPIVOT (
    value FOR acc IN ([a1], [a2], [a3]) 
) u 
END 
+0

非常感謝回覆。這幾乎適用於我,我相信我只需要做一些小事。根據你所說的,我有下面的代碼。 – user2642976

+0

SELECT ItemNumber,ACC [ACC],QtyOnHandBK FROM(SELECT a.itemnumber,a.Accessory1,a.Accessory2,a.Accessory3,b.QtyOnHandBK FROM CIX一個 LEFT JOIN庫存B關於a.itemnumber = b.itemnumber )t1 UNPIVOT( )acc IN([Accessory1],[accessory2],[accessory3]) )u – user2642976

+0

(抱歉,即將發表評論)...上面的代碼給了我我的itemnumber,然後「Accessory1」 ,然後在手邊。我想看到來自a.Accessory1的實際配件。我試着將a.accessory1放在值爲FOR的IN後面的[]中,但是這會拋出一個錯誤,我需要改變什麼?非常感謝您的幫助。 – user2642976