我希望有人愿意帮忙。我对SQL很陌生,很难得到一个简单的调试查询。
我希望创建一个简单的频率表,以查看ArrestDate字段缺少了多少值(即= 00000000)。
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行运行正常,我尝试将它们包装在另一个SELECT语句中,但这也会导致一个错误(“无效列名‘HasDate’”)。
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版本。我将非常感谢任何洞察力!
发布于 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不识别它定义的新列,但至少我现在有了功能代码--请参阅下面的屏幕截图以获得结果。
以下是我更新的代码:
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
https://stackoverflow.com/questions/73911423
复制相似问题