ПРИСОЕДИНЯЙТЕСЬ к SQL-запросу для сопоставленных результатов из двух таблиц - PullRequest
1 голос
/ 03 ноября 2011

У меня проблема в запросе 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 ]

2 голосов
/ 03 ноября 2011

Попробуйте с этим

SELECT po.PO_No,
    (SELECT COUNT(*) FROM Invoice
     WHERE PO_No = po.PO_No) AS Billed
FROM POrder po
1 голос
/ 03 ноября 2011

Вариант 1 (СЛЕДУЮЩЕЕ ВСТУПЛЕНИЕ с DISTINCT):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...