2011-01-27 114 views
3

我真的不知道如何完成我想要做的事。下面是一個簡化版本:留在左側的頂部加入加入

CREATE TABLE PO (
POID int, 
PONumber varchar(20) 
) 

INSERT INTO PO 
(POID, PONumber) 
VALUES (1, '2520001') 

CREATE TABLE WSR (
WSRID int, 
POID int, 
WSRNumber varchar(1) 
) 

INSERT INTO WSR 
(WSRID, POID, WSRNumber) 
VALUES (1, 1, '1') 

INSERT INTO WSR 
(WSRID, POID, WSRNumber) 
VALUES (2, 1, '2') 

CREATE TABLE Invoice(
InvoiceID int, 
POID int, 
InvoiceNumber varchar(20) 
) 

INSERT INTO Invoice 
(InvoiceID, POID, InvoiceNumber) 
VALUES (1, 1, '11111111') 

INSERT INTO Invoice 
(InvoiceID, POID, InvoiceNumber) 
VALUES (2, 1, '11111111 C010001') 

INSERT INTO Invoice 
(InvoiceID, POID, InvoiceNumber) 
VALUES (3, 1, '11111111 H010001') 

INSERT INTO Invoice 
(InvoiceID, POID, InvoiceNumber) 
VALUES (4, 1, '11111111 Q010001') 

INSERT INTO Invoice 
(InvoiceID, POID, InvoiceNumber) 
VALUES (5, 1, '22222222') 

CREATE TABLE InvoiceMatch(
POID int, 
InvoiceID int, 
WSRID int) 

INSERT INTO InvoiceMatch 
(POID, InvoiceID, WSRID) 
VALUES (1, 1, 1) 

INSERT INTO InvoiceMatch 
(POID, InvoiceID, WSRID) 
VALUES (1, 5, 2) 

從這個數據,我希望能夠得到這樣的結果:

PONumber, WSRNumber, InvoiceNumber 
2520001 1   11111111 
2520001 NULL  11111111 C010001 
2520001 NULL  11111111 H010001 
2520001 NULL  11111111 Q010001 
2520001 2   22222222 

我目前使用的查詢是這樣的:

SELECT DISTINCT p.POID, p.PONumber, w.WSRNumber, i.InvoiceNumber 
FROM PO p 
LEFT OUTER JOIN InvoiceMatch im ON im.POID = p.POID 
LEFT OUTER JOIN WSR w ON w.POID = im.POID 
LEFT OUTER JOIN Invoice i ON i.POID = im.POID 
WHERE p.PONumber = '2520001' 

但它不正確。所有的WSR都鏈接到每個發票。幫幫我?

+4

+1提供`創建table`和`insert`語句! – 2011-01-27 21:44:56

+0

的SQL Server 2005。對不起,意味着包括。 – 2011-01-27 21:46:45

回答

2

試試這個:

SELECT DISTINCT p.POID 
    ,p.PONumber 
    ,w.WSRNumber 
    ,i.InvoiceNumber 
FROM PO p INNER JOIN Invoice i 
    ON i.POID = p.POID LEFT JOIN InvoiceMatch im 
    ON i.InvoiceID = im.InvoiceID LEFT OUTER JOIN WSR w 
    ON im.WSRID = w.WSRID 
WHERE p.PONumber = '2520001' 
1

我認爲你的表在你的一些Left Outer Joins的順序可能會關閉:

SELECT DISTINCT p.POID, p.PONumber, w.WSRNumber, i.InvoiceNumber 
FROM PO p 
LEFT OUTER JOIN InvoiceMatch im ON p.POID = im.POID 
LEFT OUTER JOIN WSR w ON im.POID = w.POID 
LEFT OUTER JOIN Invoice i ON m.POID = i.POID 
WHERE p.PONumber = '2520001' 

或切換的加入在之前的查詢Right Outer Joins而不是左邊。

+0

對不起,這有相同的結果。 – 2011-01-27 21:48:26