Sql server SCCM报告返回服务器上的KB状态

Sql server SCCM报告返回服务器上的KB状态,sql-server,tsql,ssrs-2008,sccm,Sql Server,Tsql,Ssrs 2008,Sccm,我试图在SCCM中创建一个自定义报告,该报告将告诉我是否在服务器池中安装了特定的KB,并返回一个二进制答案(在本例中,是或否) 我的问题是我不能让它返回一个KB的状态。我正在运行这个: SELECT SYS.Name0 'Computer', SYS.operatingSystem0 'OS', UIN.Title 'Update', CASE WHEN UIN.Title LIKE '%KB3092627%' THEN 'Yes' ELSE 'No' END 'KB Ins

我试图在SCCM中创建一个自定义报告,该报告将告诉我是否在服务器池中安装了特定的KB,并返回一个二进制答案(在本例中,是或否)

我的问题是我不能让它返回一个KB的状态。我正在运行这个:

SELECT
 SYS.Name0 'Computer',
 SYS.operatingSystem0 'OS',
 UIN.Title 'Update',
 CASE
  WHEN UIN.Title LIKE '%KB3092627%' THEN 'Yes'
  ELSE 'No'
  END 'KB Installed'

FROM v_R_System SYS
 INNER JOIN v_UpdateComplianceStatus UCS ON SYS.ResourceID = UCS.ResourceID
 INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID

WHERE SYS.operatingSystem0 LIKE '%Server 2008%'

ORDER BY SYS.Name0
但是,对于每个
SYS.Name0
,我都会得到数百个结果,每个检测到的更新都会得到一个结果。对于已安装的
KB
,所有非所需KB的更新记录的值均为
'No'
,但它们仍在列表中。我尝试了
选择DISTINCT
以查看是否得到了不同的结果,但没有


我想要的是确定知识库是否存在,并返回是否存在。我觉得我甚至没有用这段代码问“是否安装了”这个基本问题,但是我想不出一种不同的方法来问这个问题。这是我应该在Report Builder中而不是在查询中做的事情吗?

免责声明:我没有在代表性数据集上测试过这一点,因为您没有提供数据集,但我认为这应该满足您的要求:

SELECT DISTINCT
    s1.Name0 'Computer',
    s1.operatingSystem0 'OS',
    CASE WHEN matches.Computer IS NULL THEN 'No' ELSE 'Yes' END 'KB Installed'
FROM v_R_System s1
LEFT JOIN
(
    SELECT s2.Name0 'Computer',
    FROM v_R_System s2
    INNER JOIN v_UpdateComplianceStatus UCS ON s2.ResourceID = UCS.ResourceID
    INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
    WHERE UIN.Title LIKE '%KB3092627%'
) AS matches ON s1.Name0 = matches.Computer
WHERE s1.operatingSystem0 LIKE '%Server 2008%'
ORDER BY s1.Name0
因此,这将有效地返回所有计算机的不同列表,并将其左连接到每个给定计算机的有问题更新的just记录的结果集。因此,当从
左联接返回的字段为
NULL
时,更新尚未安装,反之亦然


为了回答您的问题,我个人认为在查询中这样做(而不是在您的报告中这样做)是很好的-我会在这里这样做。

请在下面运行此查询:

选择DISTINCT
SYS.Name0“计算机”,
SYS.Operating\u System\u Name\u和0“OS”,
UIN.标题“更新”,
案例
当UIN.Title如“%KB3079343%”时,则为“是”
否则“不”
结束“KB已安装”
来自v_R_系统系统
在SYS.ResourceID=UCS.ResourceID上左连接v_UpdateComplianceStatus UCS
在UCS.CI\u ID=UIN.CI\u ID上左连接v\u UpdateInfo UIN
其中UIN.Title类似于“%KB3079343%”

按SYS.Name0下单
正在进行,非常感谢!我在这个问题上完全陷入了僵局。在这种情况下,使用SELECT与仅使用SELECT是否有区别?这是否会改变CASE语句或其他内容的输出?这意味着每个
s1.Name0
值只出现一次(实际上每个值可能在
v\u R\u系统
表中出现多次),这是您想要的。尝试从查询中删除
不同的
,然后查看得到的结果。:)