SQL:选择具有相同类别但相对整数的记录

这是我上班要弄清楚的棘手问题。

这是我使用的表的性质:

IF OBJECT_ID('TEMPDB..#TEMP') IS NOT NULL
  DROP TABLE #TEMP
CREATE TABLE #TEMP (
CategoryA           NVARCHAR(10),
CategoryB           NVARCHAR(10),
CategoryC           NVARCHAR(10),
IntegerA            INT,
);
INSERT INTO #TEMP(CategoryA,CategoryB,CategoryC,IntegerA)
VALUES  
('A','H','G',20),
('A','H','G',-15),
('F','L','C',10),
('N','U','X',12),
('K','G','G',15),
('K','G','G',-10)
;
SELECT * FROM #TEMP

请注意,前2行和后2行具有相同的类别,但是它们具有相反极性的整数。中间的2行以正整数分隔。

我需要一种方法来选择所有不重复的记录(例如中间2行)

而且我需要选择带有负整数的记录,而不必选择它们的正计数器。

在这种情况下,所需的输出为:

DESIRED OUTPUT

我尝试查看是否可以创建自己的表,该表仅插入所需的记录,但是又遇到了相同的问题,无法弄清如何区分所有类别相同的记录。

评论
  • 盗墓贼
    盗墓贼 回复

    For this dataset, you could just use row_number():

    select categoryA, categoryB, categoryC, integerA
    from (
        select 
            t.*, 
            row_number() over(partition by categoryA, categoryB, categoryC order by integerA) rn
        from temp t
    ) t
    where rn = 1
    
  • Yes
    Yes 回复

    嗯。 。 。我想你要:

    select t.*
    from #temp t
    where t.integerA < 0 or
          not exists (select 1
                      from #temp t2
                      where t2.A = t.A and t2.B = t.B and
                            t2.C = t.c and t2.integerA < 0
                     );
    

    Here is a db<>fiddle.