2013-07-08 50 views
0

更新列可能的重複:Concatenate row values T-SQL根據結表

我有三個表。 Items,Organizations & Items_Organizations交界表,它提供了兩者之間的多對多關係。

項目表包括我想要存儲從每個項目的聯結表獲得的值的列'組織';將每個組織與逗號或類似組合在一起。

據我所知,它不是一個列中存儲多個值的最佳做法,但是我需要通過一些處理程序在前端顯示每個項目的組織&沒有提出比存儲更好的主意一列中有多個值。

所以我想在後端做的是更新'組織'列信息使用類似的東西;

接收該組織爲某個特定項目:

SELECT OrganizationName FROM organizations 
JOIN organizations ON organizations.organizationID = 
Items_Organizations.organizationID 
WHERE Items_Organizations.item_ID = '1' 

試圖更新列「組織」採用上面UPDATE

UPDATE items SET organizations = ? 

這是相當困難的制定查詢結果表這個問題。我希望我已經說清楚了。

+0

所以你想獲得OrganizationName'的'的值,並將它們存儲與逗號分隔成'organizations'? –

+0

這裏是一個開始的地方:http://stackoverflow.com/questions/5031204/does-t-sql-have-an-aggregate-function-to-concatenate-strings。我想你需要弄清楚如何在集合函數中首先連接值。 – Bulat

+0

是的,我不需要在後端創建與其他表的連接,也可以管理所有的項目表。 –

回答

0

試試這個:

UPDATE i 
SET i.organizations = 
    STUFF((
    SELECT ', ' + o.OrganizationName 
    FROM Items_Organizations AS io 
    INNER JOIN organizations AS o ON o.organizationID = io.organizationID 
    WHERE io.Item_Id = i.Item_Id AND io.Item_Id = 1 
    FOR XML PATH('')) 
    ,1,2,'') 
FROM items AS i 
WHERE i.Item_id = 1; 

看到它在這裏的行動:

+0

謝謝!正是我想要實現的。 –

+0

@ Jorge.Methew - 隨時歡迎您:) –

+0

如果我可能會問,是否有可能以層級方式存儲組織,而不是使用逗號之間的逗號,以便我可以將每個組織作爲子級項目XML? –