SQL-запрос с оператором CASE WHEN EXISTS - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь создать SQL-запрос с предложением CASE WHEN EXISTS в SQL Server. Я предполагаю, что я делаю что-то не так, потому что когда я запускаю SELECT * FROM [Christmas_Sale], для загрузки кода SQL требуется вечность.

CREATE VIEW [Christmas_Sale]
AS
   SELECT  
       C.*,
       CASE 
          WHEN EXISTS (SELECT S.Sale_Date
                       FROM [Christmas_Sale] s
                       WHERE C.ID = S.ID) 
              THEN 0 
              ELSE 1 
       END AS ChristmasSale
   FROM 
       [Customer_Detail] C ;

Я пытаюсь написать вспомогательный выбор, который мне нужно вернуть 1если Sale_Date = 1 и 0 для чего-либо еще.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Этот запрос выглядит правильно:

CREATE VIEW [Christmas_Sale] AS
   SELECT C.*,
          (CASE WHEN EXISTS (SELECT 1
                             FROM [Christmas_Sale] s
                             WHERE C.ID = S.ID
                            ) 
                THEN 0 ELSE 1
            END) AS ChristmasSale
    FROM [Customer_Detail] C ;

Если производительность является проблемой, вам нужен индекс для Christmas_Sale(ID).

Обратите внимание, что SELECT S.Sale_Date в подзапросе не имеет смысла,потому что EXISTS проверяет строки , а не столбцы . Следовательно, я заменил его на более простой 1.

0 голосов
/ 23 октября 2019

Синтаксис вашего запроса выглядит нормально. Но так как вы заявили:

Я пытаюсь написать вспомогательный выбор, который мне нужно вернуть 1 , если Sale_Date = 1 и 0 для чего-либо еще.

... Тогда вы можете перефразировать ваш запрос, добавив еще одно условие в условие WHERE подзапроса:

CREATE VIEW [Christmas_Sale]AS
SELECT  
    C.*,
    CASE  WHEN EXISTS ( 
        SELECT 1 
        FROM [Christmas_Sale] s
        WHERE C.ID = S.ID and S.Sale_Date = 1
     )  THEN 0 ELSE 1 END AS ChristmasSale
FROM [Customer_Detail] C ;

Если в [Christmas_Sale] существует запись с соответствующим ID и Sale_Date = 1, тогда ChristmasSale будет иметь значение 1, иначе будет отображаться 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...