2011-11-03 84 views
1

我在SQL查詢中遇到問題。在SQL查詢中加入兩個表的匹配結果

有兩個表:

1:POrder與列:

[Id] [int] IDENTITY(1,1) NOT NULL, 
[PO_Date] [smalldatetime] NOT NULL, 
[PO_No] [varchar](10) NOT NULL, 
[Party_Id] [int] NOT NULL, 
[Currency] [varchar](10) NOT NULL, 
[Total_Value] [numeric](12, 2) NULL, 
[Remarks] [varchar](250) NULL, 
[PO_Status] [varchar](10) NULL, 
[Y_CODE] [varchar](4) NULL, 

2:Invoice與列:

[Id] [int] IDENTITY(1,1) NOT NULL, 
[Y_Code] [varchar](4) NULL, 
[Inv_Date] [smalldatetime] NOT NULL, 
[Inv_No] [varchar](10) NOT NULL, 
[PO_No] [varchar](10) NOT NULL, 
[Party_Id] [int] NOT NULL, 
[Total_Value] [numeric](12, 2) NULL, 
[Remarks] [varchar](250) NULL, 
[Inv_Status] [varchar](10) NULL, 
[Complete_Date] [smalldatetime] NULL, 
[OPI_Date] [smalldatetime] NULL, 
[Pmt_Status] [varchar](10) NULL, 

對於POrder一排有可能在多行Invoice表。

我必須確定是否 - 在POrder中給出了一行 - Invoice中有任何行。 PO_No是兩個表中的常見列。

結果應該是這樣的:

PO_No Billed 
11  Yes (if row(s) found in invoice) 
12  No (if no row found in invoice) 

回答

2

嘗試使用此

SELECT po.PO_No, 
    (SELECT COUNT(*) FROM Invoice 
    WHERE PO_No = po.PO_No) AS Billed 
FROM POrder po 
+0

非常感謝,它解決了我的問題! –

1

選項1(LEFT OUTER與DISTINCT JOIN):

SELECT DISTINCT 
p.PO_No, 
(CASE WHEN i.PO_No IS NULL THEN 'No' ELSE 'Yes' END) AS Billed 
FROM POrder p 
LEFT OUTER JOIN Invoice i ON i.PO_No = p.PO_No 
ORDER BY p.PO_No ASC 

選項2(子選擇):

SELECT 
PO_No, 
(CASE WHEN C > 0 THEN 'Yes' ELSE 'No' END) AS Billed 
FROM 
(
SELECT 
p.PO_No, 
(SELECT COUNT(*) FROM Invoice i WHERE i.PO_No = p.PO_No) AS C 
FROM POrder p 
) 
ORDER BY PO_No ASC 
+0

感謝您的解決方案! –