如果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
[输出]
预期结果为:
gc0ot86w1#
预期输出的规则并不明确。它可能是基于某种顺序的“最后”行,或者每列返回一组中的最大值。如果需要最大值,则应执行以下操作:
SELECT Name, Max(Age) as Age, Max(X) as X, Max(Y) as Y FROM SomeTable GROUP BY Name
如果需要“最后一行”,必须有一种方法来排序结果。表行没有隐式顺序。假设有一个递增的ID,可以使用ROW_NUMBER来查找并返回每组的最后一行:
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降序排序的,因此第一行将是最新的一行。
1条答案
按热度按时间gc0ot86w1#
预期输出的规则并不明确。它可能是基于某种顺序的“最后”行,或者每列返回一组中的最大值。
如果需要最大值,则应执行以下操作:
如果需要“最后一行”,必须有一种方法来排序结果。表行没有隐式顺序。假设有一个递增的ID,可以使用
ROW_NUMBER
来查找并返回每组的最后一行:这将按名称拆分(分区)数据,并根据每个分区内的降序计算row_number。由于行是按ID降序排序的,因此第一行将是最新的一行。