Return 如果在 Microsoft SQL 服务器中找不到任何行,则为 0
Return a 0 if no rows are found in Microsoft SQL Server
我需要你的帮助来完成这个查询。
我的 table CSO_EMP_ORG_DPM_VIE
有一个包含不同键的列。列名是 EXT_KEY
.
当我在 EXT_KEY
中收到相同的密钥编号时,我希望 SQL 代码使用此查询计算重复项:
select EXT_KEY
from CSO_EMP_ORG_DPM_VIE
group by EXT_KEY
having count(*) > 1
到目前为止这是有效的,但是当它在列中有 没有 重复键(数字)时,我希望它生成 0 零,而不是什么都没有。
我的预期结果是;当两个键相同时,我想生成一个 1。当没有键相同时,我想生成一个 0。现在我没有像屏幕截图中那样得到任何结果。
如何相应地修复此 SQL 查询?
提前谢谢你。
您的要求并不明显。为此,此查询基于每个键的计数大于 0 给出 1/0 结果...
SELECT
p.EXT_KEY,
EXT_KEY_RESULT = ISNULL((SELECT 1
FROM CSO_EMP_ORG_DPM_VIE c
WHERE c.EXT_KEY = p.EXT_KEY
HAVING COUNT(EXT_KEY) > 0), 0)
FROM
CSO_EMP_ORG_DPM_VIE p
或者,如果您希望对每个键进行计数,您可以尝试...
SELECT EXT_KEY, COUNT(EXT_KEY)
FROM CSO_EMP_ORG_DPM_VIE
GROUP BY EXT_KEY
最好在 COUNT
聚合中指定特定字段,尤其是主键,因为它的引用速度更快。
您确实需要给我们一个您的要求的预期结果,并且非常清楚您的期望。
SELECT CASE WHEN COUNT(EXT_KEY) > 0 THEN 1 ELSE 0 AS dupes
FROM CSO_EMP_ORG_DPM_VIE
请注意:感谢 forpas 提供了我借用的更流畅的答案。
使用这样的 CASE
表达式:
SELECT EXT_KEY,
CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END flag
FROM CSO_EMP_ORG_DPM_VIE
GROUP by EXT_KEY
或者如果您想要 table 的 1 个结果:
SELECT CASE WHEN COUNT(EXT_KEY) > COUNT(DISTINCT EXT_KEY) THEN 1 ELSE 0 END flag
FROM CSO_EMP_ORG_DPM_VIE
我需要你的帮助来完成这个查询。
我的 table CSO_EMP_ORG_DPM_VIE
有一个包含不同键的列。列名是 EXT_KEY
.
当我在 EXT_KEY
中收到相同的密钥编号时,我希望 SQL 代码使用此查询计算重复项:
select EXT_KEY
from CSO_EMP_ORG_DPM_VIE
group by EXT_KEY
having count(*) > 1
到目前为止这是有效的,但是当它在列中有 没有 重复键(数字)时,我希望它生成 0 零,而不是什么都没有。
我的预期结果是;当两个键相同时,我想生成一个 1。当没有键相同时,我想生成一个 0。现在我没有像屏幕截图中那样得到任何结果。
如何相应地修复此 SQL 查询?
提前谢谢你。
您的要求并不明显。为此,此查询基于每个键的计数大于 0 给出 1/0 结果...
SELECT
p.EXT_KEY,
EXT_KEY_RESULT = ISNULL((SELECT 1
FROM CSO_EMP_ORG_DPM_VIE c
WHERE c.EXT_KEY = p.EXT_KEY
HAVING COUNT(EXT_KEY) > 0), 0)
FROM
CSO_EMP_ORG_DPM_VIE p
或者,如果您希望对每个键进行计数,您可以尝试...
SELECT EXT_KEY, COUNT(EXT_KEY)
FROM CSO_EMP_ORG_DPM_VIE
GROUP BY EXT_KEY
最好在 COUNT
聚合中指定特定字段,尤其是主键,因为它的引用速度更快。
您确实需要给我们一个您的要求的预期结果,并且非常清楚您的期望。
SELECT CASE WHEN COUNT(EXT_KEY) > 0 THEN 1 ELSE 0 AS dupes
FROM CSO_EMP_ORG_DPM_VIE
请注意:感谢 forpas 提供了我借用的更流畅的答案。
使用这样的 CASE
表达式:
SELECT EXT_KEY,
CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END flag
FROM CSO_EMP_ORG_DPM_VIE
GROUP by EXT_KEY
或者如果您想要 table 的 1 个结果:
SELECT CASE WHEN COUNT(EXT_KEY) > COUNT(DISTINCT EXT_KEY) THEN 1 ELSE 0 END flag
FROM CSO_EMP_ORG_DPM_VIE