【问题标题】:how do I correctly use case when statement声明时如何正确使用大小写
【发布时间】:2013-12-01 13:39:06
【问题描述】:

嘿嘿,

我需要有关 SQL Server 中的 case when 语句的帮助。

基本上,我得到了三个产品,当总和等于2时,我希望它被计为1,否则为0。我想知道逻辑是用这段代码编写的还是可以改进的?

当 sum(hase=1 OR hasd=1 OR hasf=1)=2 then 1 else 0 end as Xavc的情况

我用这段代码尝试的是:客户可能没有所有三种产品,但是,如果他有两种产品或三个三个,那么它等于 2,计数为 1。

【问题讨论】:

  • 语法错误。如果您使用 sum 函数,则必须将数字相加。你的问题也不清楚。你想看看总和何时等于 2。总和是什么?
  • 我想对它进行分类。我买了三个产品。如果他们只有 3 个产品中的 1 个,那么 Z 类型。如果他们得到了 3 个产品中的 2 个,那么 sum=2 并且他们是客户 C。
  • 在这种情况下,SchmitzIT 似乎提供了正确的答案。

标签: sql sql-server case


【解决方案1】:

这样的?

SELECT
  CASE
    WHEN hase + hasd + hasf = 2 THEN 1
    ELSE 0
  END AS Xavc

【讨论】:

    【解决方案2】:

    我认为你正在尝试做这样的事情......

    CASE WHEN SUM(CASE WHEN hase=1 THEN 1 ELSE 0 END) 
            + SUM(CASE WHEN hasd=1 THEN 1 ELSE 0 END)
            + SUM(CASE WHEN hasf=1 THEN 1 ELSE 0 END) = 2 
        THEN 1 ELSE 0 END AS Xavc
    

    在这种情况下试试这个..

    CASE WHEN  SUM(CASE WHEN hase=1 THEN 1 ELSE 0 END) + SUM(CASE WHEN hasd=1 THEN 1 ELSE 0 END) = 2
            OR SUM(CASE WHEN hasd=1 THEN 1 ELSE 0 END) + SUM(CASE WHEN hasf=1 THEN 1 ELSE 0 END) = 2 
            OR SUM(CASE WHEN hase=1 THEN 1 ELSE 0 END) + SUM(CASE WHEN hasf=1 THEN 1 ELSE 0 END) = 2 
        THEN 1 ELSE 0 END AS Xavc
    

    【讨论】:

    • 如果所有三种情况都等于 1,那么它的总和仍然是 0f 2,这是错误的。也许我没有清楚地理解它。我认为 OR 子句是必要的。在 3 个产品中,如果它们有 3 个中的 2 个,则 sum=2 并计数 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多