【问题标题】:How to write the equivalent SQL case statement for query given below?如何为下面给出的查询编写等效的 SQL 案例语句?
【发布时间】:2013-11-13 08:40:47
【问题描述】:

这是我的工作查询:

Query = "select Cust_Id,Card_Number,Clients_Title,Address_Current,Phone_Number,Mobile_Number from Customer_New Where 1=1";
try
{
    if (txt_title.Text != "")
        Query += " and Clients_Title Like '%" + txt_title.Text + "%'";
    if (txt_address.Text != "")
        Query += " and Address_Current Like '%" + txt_address.Text + "%'";
    if (txt_phone.Text != "")
        Query += " and Phone_Number Like '%" + txt_phone.Text + "%'";
    if (txt_mobile.Text != "")
        Query += " and Mobile_Number Like '%" + txt_mobile.Text + "%'";
    if (cbo_location.Text != "")
        Query += " and AreaLocation Like '%" + cbo_location.Text + "%'";
}

catch { }

这里我正在尝试编写其等效的 SQL 案例语句。

SELECT Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, Phone_Number, Mobile_Number, AreaLocation
FROM Customer_New
    WHERE  1 = CASE WHEN @Clients_Title != " " THEN  Clients_Title  AND
                              WHEN  @Address_Current != " " THEN  Address_Current  AND
                             WHEN  @Phone_Number != " " THEN  Phone_Number AND
                             WHEN  @Mobile_Number != " " THEN  Mobile_Number AND
                             WHEN  @AreaLocation != " " THEN  AreaLocation 
END 

谁能更正我的案例陈述?

【问题讨论】:

  • 看看this question,觉得可能有帮助
  • CASE 是一个表达式 - 它被评估以产生一个。它不是一个陈述,也不应该被认为是某种控制流结构。
  • 查看此 case 语句的使用:stackoverflow.com/questions/8730933/…
  • 您应该更新您的问题以包含您在 cmets 中扩展的要求。

标签: sql sqlite


【解决方案1】:

我想你只是想要这个 - 不需要CASE

SELECT Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, Phone_Number, Mobile_Number, AreaLocation
FROM Customer_New
    WHERE
      (@Clients_Title = '' OR Clients_Title LIKE '%'+@Clients_Title+'%') AND
      (@Address_Current = '' OR Address_Current LIKE '%'+@Address_Current+'%') AND
      (@Phone_Number = '' OR Phone_Number LIKE '%'+@Phone_Number+'%') AND
      (@Mobile_Number = '' OR Mobile_Number LIKE '%'+@Mobile_Number+'%') AND
      (@AreaLocation = '' OR AreaLocation LIKE '%'+@AreaLocation+'%')

因为它至少与您的非 SQL 代码非常相似。

【讨论】:

  • '"' 附近的 WHERE 子句出错。无法解析查询文本。
  • 语法在我刚刚敲好的这个 SQL Fiddle 上看起来不错:sqlfiddle.com/#!5/4e50e/1
  • 仅适用于此:SELECT Cust_Id、Clients_Title、Card_Number、Key_Person、Address_Current、Phone_Number、Mobile_Number、AreaLocation FROM Customer_New .....没有 where 子句有效
  • 我从这个链接看到了case语句的用法:stackoverflow.com/questions/8730933/…
  • @getche - NULL not 与空字符串相同,这是NULL 似乎第一次出现在你的任何东西中'已经发布了这个问题。如果要将变量与NULL进行比较,则应为@Clients_Title IS NULL OR ...
【解决方案2】:
SELECT        Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, Phone_Number, Mobile_Number, AreaLocation
    FROM            Customer_New
        where        (CASE
            WHEN @Clients_Title != ''   THEN Clients_Title=@Clients_Title
          ELSE
             NULL IS NULL
          END)
          AND(CASE
            WHEN @Address_Current != '' THEN Address_Current =@Address_Current
          ELSE
             NULL IS NULL
          END)
                  AND(CASE
            WHEN @Phone_Number != '' THEN Phone_Number=@Phone_Number
          ELSE
             NULL IS NULL
          END)
          AND(CASE
            WHEN @Mobile_Number != '' THEN Mobile_Number=@Mobile_Number
          ELSE
             NULL IS NULL
          END)
          AND(CASE
            WHEN @AreaLocation != '' THEN AreaLocation =@AreaLocation
          ELSE
             NULL IS NULL
          END)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多