sql - 选择类别相同但整数相反的记录

标签 sql sql-server t-sql ssms greatest-n-per-group

这是我正在使用的表格的性质:

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 行具有相同的类别,但它们具有相反极性的整数。中间两行是不同的正整数。

我需要一种方法来选择所有不重复的记录(例如中间的两行)。我需要选择具有负整数的记录,而不选择其正整数。

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

DESIRED OUTPUT

我尝试看看是否可以制作自己的表,只插入我想要的记录,但我再次遇到同样的问题,我无法弄清楚如何区分所有类别都相同的记录。

最佳答案

对于此数据集,您只需使用 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

关于sql - 选择类别相同但整数相反的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61110478/

相关文章:

t-sql - 如何在 T-SQL 中实现异或?

sql - 多对多关系 JOIN 的研究

mysql查询需要在sql server中转换为find_in_set和group_concat关键字

sql - 数据库/表的重组

sql-server - NCHAR(1) 与 BIT

t-sql - SQL Server : compare date to string with no leading zeros

php - 如何通过在 php 中使用 javascript 选择从 SQL 填充的下拉列表来将 SQL 中的值检索到文本区域中

SQL 通过多个列从表中选择不同的行,忽略列顺序(意义)

mysql - 计算数据库中的列数

SQL Server XML 查询格式