首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CASE排除条件分组问题( Server 2008)

用CASE排除条件分组问题( Server 2008)
EN

Stack Overflow用户
提问于 2022-09-30 16:10:23
回答 1查看 54关注 0票数 0

我希望有人愿意帮忙。我对SQL很陌生,很难得到一个简单的调试查询。

我希望创建一个简单的频率表,以查看ArrestDate字段缺少了多少值(即= 00000000)。

代码语言:javascript
复制
SELECT 
CASE WHEN ArrestDate=00000000 THEN 'NO DATE' ELSE 'HAS DATE' END AS HasDate,
CASE WHEN ArrestDate=00000000 THEN 0 ELSE 1 END as nDate
FROM ARREST_INFO
--GROUP BY HasDate
--GROUP BY CASE WHEN ArrestDate=00000000 THEN 'NO DATE' ELSE 'HAS DATE' END 

  • 第1-4行解析没有错误(输出如下)。
  • 第5行返回:无效列名'HasDate‘。
  • 第6行返回:“ARREST_INFO.ArrestDate”在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

由于第1-4行运行正常,我尝试将它们包装在另一个SELECT语句中,但这也会导致一个错误(“无效列名‘HasDate’”)。

代码语言:javascript
复制
SELECT * FROM (
    SELECT 
    CASE WHEN ArrestDate=00000000 THEN 'NO DATE' ELSE 'HAS DATE' END AS HasDate,
    CASE WHEN ArrestDate=00000000 THEN 0 ELSE 1 END as nDate
    FROM ARREST_INFO
    )
 
GROUP BY HasDate
--GROUP BY CASE WHEN ArrestDate=00000000 THEN 'NO DATE' ELSE 'HAS DATE' END 

遗憾的是,我无法更新Server版本。我将非常感谢任何洞察力!

EN

回答 1

Stack Overflow用户

发布于 2022-09-30 18:02:20

对前一个问题的回答至少帮助我找出了问题的一部分。我的Select语句引用了两个列(nDate和HasDate),但是My语句只引用其中一个列,因此SQL没有足够的信息来确定如何显示未聚合的列数据。

@Bill写道:https://stackoverflow.com/a/13999903/9499084

这说明了单值规则,该规则禁止在按查询运行组时获得未定义的结果,并且在select列表中包括既不属于分组条件也不出现在聚合函数(SUM、MIN、MAX等)中的任何列。

我仍然不确定为什么当statement (HasDate)在Groupby语句中重新部署时,SQL不识别它定义的新列,但至少我现在有了功能代码--请参阅下面的屏幕截图以获得结果。

以下是我更新的代码:

代码语言:javascript
复制
SELECT 
CASE WHEN ArrestDate=00000000 THEN 'NO DATE' ELSE 'HAS DATE' END AS HasDate,
SUM(CASE WHEN ArrestDate=00000000 THEN 0 ELSE 1 END) AS nDate,
COUNT(*) as TotalCases

FROM ARREST_INFO
GROUP BY CASE WHEN ArrestDate=00000000 THEN 'NO DATE' ELSE 'HAS DATE' END

在这里输入图像描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73911423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档