SQL 服务器 - 分组依据

SQL Server - Group By

输入数据

ID    Value1    Value2    Value3    Value4
100    10        ABC       15:00     4551
100    20        DEF       18:00     4556
103    30        XYZ       13:00     5667
103    40        TTT       11:00     4789

期望的结果

ID    Result1    Result2   Result3   Result4
100    10        ABC       15:00     4551, 4556
103    40        TTT       11:00     5667, 4789

我想按 ID 对输入数据进行分组。结果 1、结果 2 和结果 3 列应该是来自具有最小值 3 的行的值。结果 4 应该是值 4 的串联。

我可以在没有游标和循环的情况下执行此操作吗?

我认为这应该有效。 tmpTable 只是示例数据。 partition by 用于最小值。 但我认为 XML 部分可能...更好。

WITH tmpTable (ID, Value1, Value2, Value3, Value4) AS 
    (
    SELECT 100, 10, 'ABC', '15:00', 4551 UNION 
    SELECT 100, 20, 'DEF', '18:00', 4556 UNION 
    SELECT 103, 30, 'XYZ', '13:00', 5667 UNION 
    SELECT 103, 40, 'TTT', '11:00', 4789
    )

SELECT 
    ID, Value1 AS Result1, Value2 AS Result2, Value3 AS Result3, 
    Result4 = SubString((SELECT ', ' + sub.Value4 
                         FROM (SELECT Top 100000 Convert(VARCHAR(255), tmpTable.Value4) AS Value4
                               FROM tmpTable
                               WHERE tmpTable.ID = data.ID
                               ORDER BY tmpTable.Value4 ASC) sub
                         FOR XML path('')), 3, 1000000)
FROM (  
    SELECT *, sort = Row_Number() Over (PARTITION BY ID ORDER BY Value3 ASC)
    FROM tmpTable
    ) data
WHERE sort = 1

结果:

ID    Result1   Result2   Result3   Result4
100   10        ABC       15:00     4551, 4556
103   40        TTT       11:00     4789, 5667