首页 > 解决方案 > 如何在 SQL 数据透视表中使用通配符

问题描述

在 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], 
                                  [Zscaler],
                                  [itunes],
                                  [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 将其视为文字字符并且不返回任何记录。

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

谢谢!

标签: sqlreporting-servicespivot-tablesccm

解决方案


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

数据集查询可以只是子查询,不需要旋转等...

netbios_name0添加按和分组的行组model0,然后添加按 分组的列组displayname0并将矩阵“单元格”的值表达式设置为=MAX(version0)


推荐阅读