Вычтите два запроса, используя WITH - PullRequest
2 голосов
/ 02 апреля 2019

Поэтому я хотел найти продукты, которые присутствуют во всех счетах клиентов, используя NOT EXIST. Я создал две временные таблицы, используя WITH, и впоследствии я пытаюсь вычесть их, чтобы найти результат, однако я получаю эту ошибку

Сообщение 422, уровень 16, состояние 4, строка 28 Общее табличное выражение определено, но не используется.

Вот что я делал до сих пор.

DECLARE @startdate datetime = '2010-01-01 08:56:01.49';
DECLARE @enddate datetime = '2010-01-02 10:43:17.283';

With AllProducts AS 

(
SELECT P.PRODUCT_ID,
   P.PRODUCT_NAME,
   CONCAT(DATENAME(MONTH, @startdate), '''', RIGHT(DATENAME(YEAR, 
@startdate), 2)) AS StardPeriod,
   CONCAT(DATENAME(MONTH, @enddate), '''', RIGHT(DATENAME(YEAR, @enddate), 
2)) AS EndPeriod
FROM Products$ P
 ),
ProductNotExistInInvoices AS 

(
SELECT P.PRODUCT_ID,
   P.PRODUCT_NAME,
   CONCAT(DATENAME(MONTH, @startdate), '''', RIGHT(DATENAME(YEAR, 
@startdate), 2)) AS StardPeriod,
       CONCAT(DATENAME(MONTH, @enddate), '''', RIGHT(DATENAME(YEAR, 
@enddate), 2)) AS EndPeriod
FROM Products$ P
    WHERE NOT EXISTS (SELECT 1
                 FROM Invoices$ I
   JOIN InvDetails$ ID ON I.INVOICE_ID = ID.INVOICE_ID
              WHERE I.INVOICE_DATE BETWEEN @startdate AND @enddate
                AND ID.PRODUCT_ID = P.PRODUCT_ID)
 ) 

 SELECT (AllProducts)-(ProductNotExistInInvoices) AS Result

1 Ответ

0 голосов
/ 02 апреля 2019

Вы хотите NOT EXISTS:

SELECT A.*
FROM AllProducts A
WHERE NOT EXISTS (SELECT 1 FROM ProductNotExistInInvoices N WHERE A.PRODUCT_ID = N.PRODUCT_ID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...