[英]Rolling up multiple rows into a single row and column for SQL Server data
[英]Rolling Multiple Rows into a Single Row Based on Matching Data in SQL Server
我在 SQL 服務器中有一個表格,其中包含以下布局和一些示例數據:
| ReferenceNumber | TagID |
+-----------------+-------+
| 114942 | 1 |
| 114942 | 2 |
| 114942 | 3 |
| 114942 | 4 |
| 123456 | 10 |
是否可以將 ReferenceNumber 行合並為一行,所以:
| ReferenceNumber | TagID |
+-----------------+---------+
| 114942 | 1,2,3,4 |
| 123456 | 10 |
我試過了:
select
ReferenceNumber,
stuff((select '; ' + TagID from RefTagTable
for xml path('')), 1, 1,'')[Tags]
from
RefTagTable
order by
ReferenceNumber
輸出:
| ReferenceNumber | Tags |
+-----------------+------------+
| 114942 | 1,2,3,4,10 |
| 123456 | 1,2,3,4,10 |
任何幫助將不勝感激。 謝謝
假設這是針對少量(ish)數據,您可以關聯子查詢。 它嵌套(因此可以將查詢視為在外部查詢中每行運行一次。優化器通常優化得比這更好,但在某種程度上取決於它是否比其他方法更適合您。
DROP TABLE #tags
GO
CREATE TABLE #tags (ReferenceNumber varchar(10), TagId varchar(20))
GO
INSERT INTO #tags (ReferenceNumber , TagId )
SELECT 114942, 1
UNION SELECT 114942, 2
UNION SELECT 114942, 3
UNION SELECT 114942, 4
UNION SELECT 123456, 1
GO
SELECT ReferenceNumber,
stuff((select '; ' + TagID from #Tags AS CorrTagTable WHERE CorrTagTable.ReferenceNumber = Reftagtable.ReferenceNumber
for xml path('')), 1, 1,'')[Tags]
from #tags AS RefTagTable
order by ReferenceNumber
GO
生產:
ReferenceNumber Tags
114942 1; 2; 3; 4
114942 1; 2; 3; 4
114942 1; 2; 3; 4
114942 1; 2; 3; 4
123456 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.