2010-05-20 54 views
0

我有一張表,其中包含以下給出的一些數據。它採用樹狀結構按分組工作,將數據分組爲字符串格式

   Department 

    SubD1,      SubD2 ..... 

PreSubD1, PreSubD1...  PreSubD2, PreSubD2...  

pk_map_id   preferences   ImmediateParent  Department_Id 
-------------------- -------------------- -------------------- -------------------- 
20     14     5     1 
21     15     5     1 
22     16     6     1 
23     9     4     2 
24     4     3     2 
25     24     20     2 
26     25     20     2 
27     23     13     2 

我希望將我的記錄代表部門則直接父則偏好各由分離的「」

department Immediate Parent preferences 
1    5,6     14,15,16 
2    4,3,20,13   9,4,24,25,23 

and this table also 

Immediate parent preferences 
5      14,15 
6      16 
4      9 
3      4 
20     24,25 
13     13 

在實際的情況下,所有這些都是我的ids,將被他們的字符串字段替換。

我使用SQL Server 2K5

回答

2

可以FOR XML PATH使用子查詢,以獲得逗號分隔值的列表。然後你GROUP BY你的關鍵字段,以獲得正確的值。

對於第一個查詢

SELECT 
    [Department_Id], 
    STUFF(
    (
     SELECT 
      ',' + CONVERT(varchar(10), [ImediateParent]) 
     FROM 
      [YourTable] [YourTable2] 
     WHERE 
      [YourTable2].[Department_Id] = [YourTable].[Department_Id] 
     FOR XML PATH('') 
    ), 1, 1, ''), 
    STUFF(
    (
     SELECT 
      ',' + CONVERT(varchar(10), [Preferences]) 
     FROM 
      [YourTable] [YourTable2] 
     WHERE 
      [YourTable2].[Department_Id] = [YourTable].[Department_Id] 
     FOR XML PATH('') 
    ), 1, 1, '') 
FROM 
    [YourTable] 
GROUP BY 
    [YourTable].[Department_Id] 

,併爲您的第二個查詢

SELECT 
    [ImediateParent], 
    STUFF(
    (
     SELECT 
      ',' + CONVERT(varchar(10), [Preferences]) 
     FROM 
      [YourTable] [YourTable2] 
     WHERE 
      [YourTable2].[ImediateParent] = [YourTable].[ImediateParent] 
     FOR XML PATH('') 
    ), 1, 1, '') 
FROM 
    [YourTable] 
GROUP BY 
    [YourTable].[ImediateParent]