0

我需要你的帮助来完成这个查询。

我的表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 零生成它,而不是什么都没有。

查询中没有结果

将结果的计数更改为 0

用 3 个相同的键输出

我的预期结果是;当两个键相同时,我想生成一个 1。当没有相同的键时,我想生成一个 0。现在我根本没有像屏幕截图中那样得到任何结果。

如何相应地修复此 SQL 查询?

先感谢您。

4

2 回答 2

2

使用这样的CASE表达式:

SELECT EXT_KEY,
       CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END flag
FROM CSO_EMP_ORG_DPM_VIE
GROUP by EXT_KEY

或者如果您想要表格的 1 个结果:

SELECT CASE WHEN COUNT(EXT_KEY) > COUNT(DISTINCT EXT_KEY) THEN 1 ELSE 0 END flag
FROM CSO_EMP_ORG_DPM_VIE
于 2020-08-14T10:11:30.107 回答
0

对于您的要求,这并不是很明显。为此,此查询基于每个键的计数大于 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 提供了我借来的更流畅的答案。

于 2020-08-14T09:43:35.590 回答