如何在SQL Server中获取相异记录

juud5qan  于 2022-12-03  发布在  SQL Server
关注(0)|答案(1)|浏览(147)

如果sql server中的名称重复,我如何在单个列中显示所有记录。

SELECT * INTO #temp
FROM (
Select 'S1' Name, '1' Age, 'A' X, 'B' Y UNION ALL
Select 'S1', '1', '', 'B'
) A

Select *
From #temp

[输出]

预期结果为:

gc0ot86w

gc0ot86w1#

预期输出的规则并不明确。它可能是基于某种顺序的“最后”行,或者每列返回一组中的最大值。
如果需要最大值,则应执行以下操作:

SELECT Name, Max(Age) as Age, Max(X) as X, Max(Y) as Y
FROM SomeTable
GROUP BY Name

如果需要“最后一行”,必须有一种方法来排序结果。表行没有隐式顺序。假设有一个递增的ID,可以使用ROW_NUMBER来查找并返回每组的最后一行:

with rows as 
(
    SELECT ID,Name,Age,X,Y,ROW_NUMBER(PARTITION BY Name ORDER BY ID DESC) as RN
    FROM SomeTable
)
SELECT Name,Age,X,Y
FROM rows
WHERE RN=1

这将按名称拆分(分区)数据,并根据每个分区内的降序计算row_number。由于行是按ID降序排序的,因此第一行将是最新的一行。

相关问题