SQL在一行中查找具有相同值的行,在另一列中查找具有多个值的行,并在第三列中查找一个设置值

时间:2020-05-27 11:57:15

标签: sql

很抱歉,标题的描述性不强,我不是母语。 所以我有下表NUMBERS

A..B..C..YEAR
1..1..1..2019
2..1..0..2019
2..2..1..2019
2..3..1..2019
2..4..1..2020

当C列为1时,一年中每个A列的值在B列中都应该只有一个值。如果有多个,那是我需要找出的错误。

因此,我应该进行查询,在此示例中为我提供第3行和第4行。我尝试如下进行操作,但这也给了我第5行,因为“拥有计数”似乎遍历了所有年份,其中只想在给定年份中进行查找。我如何包括不同B的年份?

SELECT A, B
FROM NUMBERS
WHERE A IN (
   SELECT A
   FROM NUMBERS
   WHERE C = 1
   AND YEAR = 2019
   GROUP BY A
   HAVING COUNT (DISTINCT B) > 1
   )
;

2 个答案:

答案 0 :(得分:0)

如果我的理解正确,那么您想要包含多个“ b”值的行:

select n.*
from (select n.*,
             min(b) over (partition by a, year) as min_b,
             max(b) over (partition by a, year) as max_b
      from numbers n
      where n.c = 1 
     ) n
where min_b <> max_b

答案 1 :(得分:0)

也许您可以将年份添加到分组依据。

SELECT A, B
FROM NUMBERS
WHERE A IN (
   SELECT A
   FROM NUMBERS
   WHERE C = 1
   AND YEAR = 2019
   GROUP BY YEAR, A
   HAVING COUNT (DISTINCT B) > 1
   )
;