2010-05-20 48 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]