乡下种田的 发表于 2023-9-13 14:29:05

SQL:动态视图列值的动态视图

给定两个示例表:
门票表
IDUser    Description0   James   This is a support ticket1   Fred    This is a ticket too属性表
IDTicketID    Label         Value         Engineer      Scott 1 1 1                                                                                                                                                                                                                                                                                                                                                                                                      Engineer      Dale      Manu            Dell3 3 1                                                               Manu            HP      OS            Windows5 51                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  OS            Linux如何获得这样的视图:
IDUser    Description               Engineer    Manu    OS1   James   This is a support ticket    Scott       Dell    Windows2   Fred    This is a ticket too      Dale      HP      Linux需要注意的是,属性表并不总是一样的。有些票证可能有别人没有的属性。
有可能吗?
                                                               
    解决方案:                                                               
                                                                您可以使用PIVOT执行此操作PIVOT时,可以使用以下两种方法之一进行操作:使用“静态数据透视表”(将对行进行编码)或“动态数据透视表”将在运行时创建列列表:
静态数据透视表(请参见SQL Fiddle中的Demo):
select id,,,,fromselect t.id t. p.ticketid p.label p.value    from tickets t    inner join properties p      on t.id = p.ticketid) xpivot(    min(value)    for label in (,,)) p或者,你可以用Dynamic Pivot(请参见SQL Fiddle for
Demo):
DECLARE @cols AS NVARCHAR(MAX),   @queryAS NVARCHAR(MAX);select @cols = STUFF((SELECT distinct ,   QUOTENAME(p.label)                     from tickets t                  inner join properties p                        on t.id = p.ticketid            FOR XML PATH(''),TYPE          ).value('.','NVARCHAR(MAX)1、1、1、1、')set @query = 'SELECT id,,'   @cols   ' from            select t.id         t.         p.ticketid         p.label         p.value                  from tickets t                  inner join properties p                        on t.id = p.ticketid         x            pivot            min(value)                for label in@cols   ')         p 'execute(@query)这两个查询将返回相同的结果。
页: [1]
查看完整版本: SQL:动态视图列值的动态视图