2016-11-08 78 views
0

我在過去一天左右的時間裏對此進行了大量的背景閱讀,我對如何實現這一點並不知情。將每個列值連接到子查詢的字符串

我已經看過這個網站,發現串聯多行成一列但是我後有點多定製的,請幫助的方式...

我有兩個表 - 一個是一個列表的人和他們的細節,如名稱等和一個人的參考。

第二個包含許多關於某個人的警報,一個人可以有多個警報。這將包含一個人參考和他們在一個字符串中的警報類型。

我想加入這兩個表使用人蔘考的內部聯接。 我接下來想要查找每個人的所有警報,並將其連接成一個字符串,並將其顯示爲「所有警報」列。

所以我將結束與以下的輸出:

First Name | Surname | All Alerts 
-----------+---------+--------------------------  
Tony  | Stark | Alert 1, Alert 2, Alert 3 

我能得到儘可能通過所有的警報表警報的打算,把警報每個人變成了一個字符串,很明顯,我每個人都需要一個連接的價值,並沒有想出如何做到這一點。

我已經花了一天時間瞭解了這一點,並研究了XMLPath解決方案並使用CTE,CROSS APPLY和子查詢來指定where子句。我有點失落。

DECLARE @ConcatenatedVals VARCHAR (255) 

SET @ConcatenatedVals = 
    (
     DECLARE @AllAlerts VARCHAR(8000) 

     SELECT @AllAlerts = COALESCE(@AllAlerts + ', ', '') + personAlert 
     FROM Alerts 

     SELECT @AllAlerts AS 'All Alerts' 
    ) 

回答

0

我發現這個解決方案張貼在這裏:

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/#Toc205129480

這亞當Machanic引用的解決方案

此外,東西實際上是一個功能,以前沒有見過這樣的:

SELECT p1.CategoryId, stuff((SELECT','+ ProductName FROM Northwind.dbo.Products p2 WHERE p2.CategoryId = p1.CategoryId ORDER BY ProductName FOR XML PATH(''),TYPE).value('。','varchar(max)') ,1,1, '') AS Products FROM Northwind.dbo.Products p1 GROUP BY CategoryId;

相關問題