2014-02-19 37 views
0

可能這很奇怪,但我需要連接ActionId值由ActionID對應的角色ID的組和秩序是必須的,像對另一列組串聯列值

ActionID RoleId 
"1357"  1 
"2468"  2 

這裏有些東西是我目前,我正在尋找MS SQL中等效的GROUP_CONCAT。

select av.ActionId, ra.RoleId from RoleAction ra join ActionValue av 
on ra.ActionId = av.ActionId order by av.ActionId 

ActionID RoleId 
1   1 
3   1 
5   1 
7   1 
4   2 
2   2 
6   2 
8   2 

有沒有辦法做到這一點?提前致謝。

回答

1

你可以把它的工作使用FOR XML PATH('')和內部查詢:

SELECT DISTINCT T1.RoleID, 
    (SELECT '' + ActionID 
    FROM RoleAction T2 
    WHERE T1.RoleID = T2.RoleID 
    ORDER BY ActionID 
    FOR XML PATH('')) 
FROM RoleAction T1 
1

這應該工作:

WITH CTE_A AS 
    (
    select av.ActionId, ra.RoleId from RoleAction ra join ActionValue av 
    on ra.ActionId = av.ActionId 
    ) 
    SELECT DISTINCT A.RoleId, 
    (SELECT '' + 
    CAST(B.ActionId AS varchar(10)) 
    FROM CTE_A B 
    WHERE B.RoleID = A.RoleID 
    FOR XML PATH('')) AS ActionID 
    FROM CTE_A A 
    GROUP BY A.RoleID 
+0

這不是爲我工作也給予相同的結果問題 –

+0

混合定的查詢在哪裏條件。更新了查詢。現在檢查。 –

+0

謝謝,現在工作正常,你只是想念Order By,但對我來說沒問題.. :) –