2016-12-29 144 views
0

我想在SCCM创建一个自定义报告,它会告诉我,如果一个特定的KB安装在服务器池,并返回一个二进制的答案(在这种情况下,是或否)。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,一个为每个检测到的更新。更新所有记录其中的arent所需KB有'No'KB Installed的值,但他们仍然列。我试图SELECT DISTINCT看看它是否给我不同的结果,但它不。

我想要的是,以确定是否KB存在,并且返回是否是与否。我觉得我甚至没有问这个代码的“安装与否”这个基本问题,但我想不出以不同的方式提出这种问题。这是我应该在报表生成器而不是查询中做的事情吗?

回答

0

免责声明:我没有一个有代表性的数据设置为你没有提供一个测试,但我认为这应该做你想要达到的:

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 

因此,这有效地返回所有计算机和LEFT JOIN s此的不同列表结果集的只是记录在每个给定的计算机问题的更新。因此,当字段从LEFT JOIN返回是NULL,更新尚未安装,反之亦然。

并回答你的问题,我个人认为它的罚款在查询中这样做(在您的报告不是以某种方式) - 这是在那里我会做到这一点。

+0

这是做的,非常感谢你!我在这个问题上绝对停滞不前。 – Eric

+0

在这种情况下,使用SELECT DISTINCT问题还是只选择SELECT?就像那样会改变CASE语句的输出呢? – Eric

+0

这意味着每个's1.Name0'值只出现一次(而实际上每个值可能出现在'v_R_System'表多次),这是你想要的。尝试从查询中删除“DISTINCT”,看看你得到了什么结果。 :) – 3N1GM4

0

请运行下面这个查询:

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

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

 
WHERE UIN.Title LIKE '%KB3079343%' 
 

 

 
ORDER BY SYS.Name0

在我的测试实验室,有相应的一个KB数倍记录。这种方法可能不是一个完美的解决方案。 enter image description here

你可以尝试内置的报告: \监视\概览\报告\报告\软件更新 - 一个遵\ 符合8 - 计算机在特定的合规性状态的更新(二级)