SQL 选择多行作为一行

XcO*_*der 1 sql t-sql sql-server

桌子

ID 日期 模型 价格
6255 2018-01-31 HZH98CC 435.34
6256 2018-01-31 CVVCDE7 23.24
6257 2018-01-31 WWRT423 24.24
6258 2018-02-14 DT4 43.23
6259 2018-02-14 D42C 243.2

如何使用查询/视图从数据库表中获取所有记录并将具有相同日期的行合并为一行?我不知道如何开始。我已经尝试过FOR XML,但没有得到我想要的结果

SELECT DISTINCT transactions.[id], 
    SUBSTRING(
        (
            SELECT ','+ transactions.model  AS [text()]
            FROM transactions
            FOR XML PATH ('')
        ), 2, 1000) transactions
FROM transactions
Run Code Online (Sandbox Code Playgroud)

哪个返回

ID 模型
6255 HZH98CC、CVVCDE7、WWRT423、DT4、D42C

预期结果

ID 日期 模型 价格
6255,6256,6257 2018-01-31 HZH98CC、CVVCDE7、WWRT423 435.34,23.24,24.24
6258,6259 2018-02-14 DT4、D42C 43.23,243.2

这是否可能或者我必须这样做

Select distinct [date]
From transactions Order by [date]
Run Code Online (Sandbox Code Playgroud)

并使用结果日期来选择匹配的行并稍后将它们组合在代码中?

我需要将匹配行(即具有相同日期的行)中的所有单元格连接到该列的单元格中。

Gor*_*off 5

自 SQL Server 2017 以来,SQL Server 支持string_agg()

select date,
       string_agg(id, ',') within group (order by id) as ids,
       string_agg(model, ',') within group (order by id) as model,
       string_agg(price, ',') within group (order by id) as prices
from transactions
group by date;
Run Code Online (Sandbox Code Playgroud)

在旧版本的 SQL Server 中,您必须使用 XML 解决方法。