【发布时间】:2018-03-28 17:07:47
【问题描述】:
我正在尝试使用 SSRS 从我的 SCCM SQL 数据库创建报告。我在 SSRS 中运行的 SQL 查询如下所示:
SELECT
SYS.Netbios_Name0,
SYS.User_Name0,
OPSYS.Caption0 as Caption,
OPSYS.Version0,
CSYS.Model0,
Netcard.Description0,
Netcard.MACAddress0,
Netcard.Manufacturer0,
BIOS.SerialNumber0 as 'BiosSerial0',
WD.SerialNumber0 as 'WDSerial0',
ENC.SMBIOSAssetTag0,
WD.LastUpdate0,
CONVERT(VARCHAR(11), wd.WarrantyStartDate0, 106) as WarrantyStartDate0,
CONVERT(VARCHAR(11), wd.WarrantyEndDate0, 106) as WarrantyEndDate0
FROM
fn_rbac_R_System(@UserSIDs) SYS
LEFT JOIN fn_rbac_GS_X86_PC_MEMORY(@UserSIDs) MEM on SYS.ResourceID = MEM.ResourceID
LEFT JOIN fn_rbac_GS_COMPUTER_SYSTEM(@UserSIDs) CSYS on SYS.ResourceID = CSYS.ResourceID
LEFT JOIN fn_rbac_GS_PROCESSOR(@UserSIDs) Processor on Processor.ResourceID = SYS.ResourceID
LEFT JOIN fn_rbac_GS_OPERATING_SYSTEM(@UserSIDs) OPSYS on SYS.ResourceID=OPSYS.ResourceID
LEFT JOIN fn_rbac_GS_PC_BIOS(@UserSIDs) BIOS on SYS.ResourceID=BIOS.ResourceID
LEFT JOIN fn_rbac_GS_SYSTEM_ENCLOSURE(@UserSIDs) ENC on SYS.ResourceID=ENC.ResourceID
LEFT JOIN fn_rbac_GS_NETWORK_ADAPTER(@UserSIDs) Netcard ON SYS.ResourceID = Netcard.ResourceID
INNER JOIN fn_rbac_GS_WESLEYANDEVICE(@UserSIDs) WD on SYS.ResourceID=WD.ResourceID
WHERE (Netcard.Description0 LIKE '%I219-V%') OR (Netcard.Description0 LIKE '%Wireless-AC 8265%') AND (Netcard.MACAddress0 IS NOT NULL)
ORDER BY WD.WarrantyEndDate0 ASC
此查询返回我想要的结果,但它为 Netcard 字段中的每个结果创建了一个新行,包括一些重复的信息。例如,我有一台具有多个网络接口的计算机(受我上面的 WHERE 语句限制)。我正在搜索的两个网络适配器被返回但在单独的行上:
我希望每台计算机只有一行,而 Netcard 字段返回的数据将位于同一行的新列中。我不确定如何进行,因为我不精通 SQL 或 DBA。我假设这将是一个支点,但我不确定如何做到这一点(特别是键控)。这是我希望实现的一个例子:
感谢您帮助我找到最好的方法。
【问题讨论】:
-
你能在你的 select 子句中添加 DISTINCT 吗?
-
你知道机器上最多可以放多少张卡吗?
-
@Shawn 谢谢,我将使用 PIVOT 进行检查。每台机器中只有两个适配器。但是,我正在查看结果,最多列出 4 个 MAC 地址(2 个用于有线,2 个用于无线) - 可能来自某种修复/交换。大多数结果有两个。我确实遇到了一些重复...一台机器列出了 10 个 mac 地址。我认为 SCCM 在数据库中有一些垃圾。
-
神圣功能!!!看起来有些事情在设计中出现了问题。您在这里有一个又一个的函数,并且它们每个都接收到似乎是分隔字符串的内容。如果您在此处需要真正的帮助,则必须提供一些详细信息。所有这些功能在做什么?然后您将需要一个动态数据透视表或动态交叉表。
标签: sql sql-server reporting-services sql-server-2016 sccm