【问题标题】:Resolving Case When Doubling Up加倍时解决案例
【发布时间】:2018-05-29 14:31:43
【问题描述】:

我一直在到处寻找答案,但我似乎找不到答案。如果这是重复的,我真的很抱歉,但我真的需要一些帮助

我有一个非常简单的 case when 语句,它按预期工作

CASE WHEN  Table.Expirydate < @Today AND CON.Column IS NULL
     THEN count(ContactID) OVER (PARTITION BY column,type ) END

但是,它会产生两行

结果是

NAME    COUNTID CLAUSE
A       10      5
A       10      NULL
B       1       1
B       1       NULL

理想情况下,我想删除带有空值的行 -

NAME  COUNTID  CLAUSE
A     10          5 
B     1           1

我尝试过使用CASE WHEN MAX(CASE WHEN END) 的建议,但出现此错误。我使用了合并,这不起作用。我可能遗漏了一些非常明显的东西!

只是为了澄清它不容易放在 where 子句中,因为我的存储过程中有很多这样的子句。

select语句的基本部分如下-

作为我的选择声明

Table1.Id AS NAME

,Count(ConID) OVER (PARTITION BY Table1.Id2) AS COUNTID

,Case When Statement AS CLAUSE

【问题讨论】:

  • 请阅读有关如何将问题作为问题 (stackoverflow.com/help) 的文档并继续适当地格式化您的问题(您的代码段应明确标记为这样)以提高可读性。
  • 在 where 子句过滤器中使用大小写,例如 select * from abc where (1= CASE WHEN Table.Expirydate
  • case expression 本身不能创建额外的行,提供完整的查询而不是小的 sn-ps。
  • 你能用真实的列名在问题中显示整个实际查询吗?从您展示的部分很难将其粘在一起,第一个 sn-p 使用的列名与其他列名不同,

标签: sql sql-server-2012 case-when


【解决方案1】:

添加WHERE 子句很诱人:

WHERE Table.Expirydate < @Today AND CON.Column IS NULL

但是,这样做会更改用于窗口函数的数据。

改为使用子查询:

select t.*
from (<your query here>) t
where <expr> is not null;

【讨论】:

  • 非常感谢大家的回答/cmets。我将无法在此处发布我的实际代码作为其工作,我将再次尝试子查询。还是谢谢
猜你喜欢
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2013-03-27
  • 1970-01-01
相关资源
最近更新 更多