SQL 服务器:通过连接将多行合并为一行 table?
SQL Server: Combine multiple rows into one row from a join table?
我有一个如下所示的 SQL 查询。
SELECT ID, Data1, DataFromTable2
FROM Table1
LEFT JOIN Table2 on Table1.ID = Table2.ID
WHERE ID = 1
我正在尝试连接 Table2(其中包含具有相同 ID 的多行)的两个表。我想将多行合并为一行。
我在这里找到了一个 post 将多行合并为一行。
SQL Server: combining multiple rows into one row
DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + ', ', '') + stringvalue
FROM jira.customfieldValue
WHERE customfield = 12534
AND ISSUE = 19602
SELECT @combinedString as StringValue
但我很难将其应用于上述查询。
使用 GROUP BY
查询 STRING_AGG
:
SELECT
t1.ID,
t1.Data1,
STRING_AGG(t2.DataFromTable2, ',') AS data
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID
GROUP BY
t1.ID,
t1.Data1
WHERE
t1.ID = 1;
我假设您使用的是 SQL Server 2017 或更高版本。对于 SQL 服务器的早期版本:
SELECT
t1.ID,
t1.Data1,
data = STUFF((
SELECT ',' + t2.DataFromTable2
FROM Table2 t2
WHERE t2.ID = t1.ID
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Table1 t1;
我有一个如下所示的 SQL 查询。
SELECT ID, Data1, DataFromTable2
FROM Table1
LEFT JOIN Table2 on Table1.ID = Table2.ID
WHERE ID = 1
我正在尝试连接 Table2(其中包含具有相同 ID 的多行)的两个表。我想将多行合并为一行。
我在这里找到了一个 post 将多行合并为一行。 SQL Server: combining multiple rows into one row
DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + ', ', '') + stringvalue
FROM jira.customfieldValue
WHERE customfield = 12534
AND ISSUE = 19602
SELECT @combinedString as StringValue
但我很难将其应用于上述查询。
使用 GROUP BY
查询 STRING_AGG
:
SELECT
t1.ID,
t1.Data1,
STRING_AGG(t2.DataFromTable2, ',') AS data
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID
GROUP BY
t1.ID,
t1.Data1
WHERE
t1.ID = 1;
我假设您使用的是 SQL Server 2017 或更高版本。对于 SQL 服务器的早期版本:
SELECT
t1.ID,
t1.Data1,
data = STUFF((
SELECT ',' + t2.DataFromTable2
FROM Table2 t2
WHERE t2.ID = t1.ID
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Table1 t1;