【问题标题】:convert row to column sql based on pk fk relationship基于pk fk关系将行转换为列sql
【发布时间】:2013-12-21 09:23:57
【问题描述】:

我有以下两张表

tblPlan

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

tbl详细信息

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

基于关系

我希望每个计划都有一行。如何做到这一点?非常感谢任何人的帮助?

【问题讨论】:

  • 你在问如何加入吗?
  • 或者您是否希望每个 tblPlan 行占一行,并且同一行不同字段中的所有详细信息?
  • 我希望每个 tblPlan 行都有一行,并且同一 row.details 表中不同字段中的所有详细信息都有几行,其 PlanID 与 tblPlan ID 相同。 1 A X 1 2 M 1 2 L 2 5 2 B X 3 3 L 3 4 3 C X 1 1
  • 如果您将每个细节放在单独的行中,然后通过前端将它们连接起来,可以吗?

标签: sql sql-server-2008 join


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多