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