繁体   English   中英

SQL 查询具有 CASE WHEN EXISTS 语句

[英]SQL query having CASE WHEN EXISTS statement

我试图在 SQL 服务器中使用CASE WHEN EXISTS子句创建 SQL 查询。 我假设我做错了什么,因为当我运行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 ;

我正在尝试编写一个子 select 如果 Sale_Date= 1 和 0 其他任何东西,我需要返回一个 1 。

您的查询语法看起来不错。 但既然你说:

我正在尝试编写一个子 select如果 Sale_Date= 1和 0 其他任何东西,我需要返回一个 1 。

...然后您可以通过在子查询的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]中存在具有相应IDSale_Date = 1的记录,则ChristmasSale将具有值1 ,否则将显示0

此查询看起来正确:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM