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]