如何在SQL Pivot中使用通配符

问题描述

在SCCM中,我正在创建一个透视报告,该报告将从应用程序列表中带回应用程序版本。只要我知道已安装应用程序的确切名称,使用以下代码对我来说就很好用了:

SELECT netbios_name0  AS 'Computer Name',model0         AS Model,[Google Chrome],[zscaler],[itunes],[Microsoft Office 365 ProPlus - en-us] AS 'Office'
              
FROM   (SELECT rSYS.netbios_name0,CS.model0,arp.displayname0,arp.version0 AS ARPVersion 
        FROM   v_r_system rSYS 
               JOIN v_gs_computer_system CS 
                 ON CS.resourceid = rsys.resourceid 
               JOIN v_add_remove_programs arp 
                 ON rsys.resourceid = arp.resourceid 
               
       ) Temp 
       PIVOT ( Max(arpversion) 
             FOR displayname0 IN ([Google Chrome],[Microsoft Office 365 ProPlus - en-us]
                                    ) ) Piv 

查询结果如下:

ComputerName    Model                  Google Chrome    zscaler     itunes      Office
Computer1       Latitude 5300 2-in-1   86.0.4240.111    2.1.2.105   12.9.2.6    16.0.11328.20368
Computer2       Latitude 7390          86.0.4240.111    2.1.2.105   12.9.2.6    16.0.11328.20492
Computer3       Latitude 7390 2-in-1   86.0.4240.111    1.5.2.501   12.9.2.7    16.0.11328.20492

这正是我希望报表显示的方式,但是,许多应用程序的名称随每个版本而变化,因此我需要能够对应用程序的不同版本进行通配搜索。我曾尝试在IN语句中使用%通配符,但sql似乎将其视为文字字符,并且不返回任何记录。

因此,我想知道是否有一种方法可以使用上面显示代码进行通配搜索,或者有另一种方法可以以类似的格式显示数据。

谢谢!

解决方法

如果您的子查询(Temp)包含您需要的所有数据,则您应该只可以在报表中使用矩阵控件,而不是表。

数据集查询可以只是子查询,无需进行数据透视等等。

添加按netbios_name0model0分组的行组,然后添加按displayname0分组的列组,并将矩阵“ cell”的值表达式设置为=MAX(version0)