根据pk fk关系将行转换为列sql

时间:2013-12-21 09:23:57

标签: sql sql-server-2008 join

我有以下两个表

tblPlan

ID  |   Name
------------
1   |   A
2   |   B
3   |   C

tblDetails

ID  |   PlanID  |   R   |   C   |   Type
-----------------------------------------
1   |   1       |   1   |   2   |   X
2   |   1       |   1   |   2   |   M
3   |   1       |   2   |   5   |   L
4   |   2       |   3   |   3   |   X
5   |   2       |   4   |   4   |   L
6   |   3       |   1   |   c   |   X

tblDetails.PlanId(fk) = tblPlan.ID(Pk)

现在我想要输出如下

Plan.ID,Plan.Name Type R  C  Type R  C Type R  C ...

1   A   X  1   2   M   1   2   L   2   5
2   B   X  3   3               L   3   4
3   C   X  1   1

基于关系

我想为每个计划提供一行。如何做到这一点?非常感谢任何帮助?

1 个答案:

答案 0 :(得分:1)

单个查询在单独的列中似乎不可能,但您可以像这样在单列中以逗号分隔值获取计划详细信息

 select Id, 
        Name,
        STUFF(( SELECT  ',' + [Type] + ',' + CAST(R AS VARCHAR(1)) + ',' + C
                FROM    tblDetails
                WHERE   PlanID = P.Id
                FOR XML PATH (''))
        , 1, 1, '') AS PlanDetail
from    tblPlan P

输出

Id     Name    PlanDetail
1      A       X,1,2,M,1,2,L,2,5
2      B       X,3,3,L,3,4
3      C       X,1,c