对于SQL Server 2008上的以下场景,需要一些关于数据透视表的帮助。我通常做的不仅仅是基本的SQL查询,这个让我有点难过。
查看#1 - v_R_System(从这里需要Name0列) 查看#2 - v_GS_ADD_REMOVE_PROGRAMS(此处需要DisplayName0)
非透视查询如下所示:
SELECT DISTINCT sys.Name0 AS [SYSTEM NAME], arp_x86.DisplayName0 AS [ADD/REMOVE PROGRAMS]
FROM v_R_System AS sys LEFT OUTER JOIN
v_GS_ADD_REMOVE_PROGRAMS AS arp_x86 ON sys.ResourceID = arp_x86.ResourceID
WHERE (sys.Name0 LIKE 'SRV%')
GROUP BY arp_x86.DisplayName0, sys.Name0
上述查询的结果只显示两列,一列用于系统名称,另一列用于添加/删除程序数据。
System Name Add/Remove Programs
------------------------------------
SRV01 APP01
SRV01 APP02
SRV01 APP03
SRV02 APP01
SRV02 APP03
问题是我们为每个服务器获取了多行,所以我们想要的是每个服务器有1行,但是顶部显示软件列表,然后在软件列中加上“*”安装在特定的服务器上。
System Name APP01 APP02 APP03
------------------------------------------
SRV01 * * *
SRV02 * *
非常感谢任何帮助!
感谢。
答案 0 :(得分:1)
如果您只有theese tree应用程序,则应执行以下操作:
select
sys.Name0,
max(case arp_x86.DisplayName0
when 'APP01' then arp_x86.DisplayName0 else '' end) as APP01,
max(case arp_x86.DisplayName0
when 'APP02' then arp_x86.DisplayName0 else '' end) as APP02,
max(case arp_x86.DisplayName0
when 'APP03' then arp_x86.DisplayName0 else '' end) as APP03
from v_R_System AS sys
LEFT OUTER JOIN v_GS_ADD_REMOVE_PROGRAMS AS arp_x86
ON sys.ResourceID = arp_x86.ResourceID
where sys.Name0 LIKE 'SRV%'
group by sys.Name0
这只是一种sql方式。
对于动态PIVOT表格,您可以看到 answer ,您必须适应您的问题。