SQL 报告:已添加具有相同键的项目

SQL Reporting : An item with the same key has already been added

我在 SQL Build 上不断收到此错误。我尝试执行查询并显示正确的结果,但是当我尝试刷新字段时,我收到一条错误消息:

已添加具有相同键的项目。

这是我之前的 SQL 报告,它会在我们的环境中显示 SCCM 代理并且有效。

Select Distinct
 vrs.AD_Site_Name0 [AD Site],  
 vrs.name0 [Computer], 
 vrs.User_Name0 [Current User], 
 vru.Unique_User_Name0 [Account Name], 
 vru.Full_User_Name0 [Display Name], 
 opsys.caption0 [OS], 
 vrs.Client0 [Client],
 
 CASE
 When compsys.SystemType0 like '%x86%' Then 'x86'
 When compsys.SystemType0 like '%x64%' Then 'x64'
 Else 'unknown'
END as [System Type],

CASE  
 WHEN vrs.Name0 like 'Ou%' THEN 'Ou' 
 
 ELSE 'Others'
END as [AD Site Name],

CASE 
  WHEN opsys.Caption0 like '%Windows 7%' THEN 'Windows 7'
  WHEN opsys.Caption0 like '%Windows 8%' Then 'Windows 8'
  WHEN opsys.Caption0 like '%Windows 10%' THEN 'Windows 10'
  When opsys.Caption0 like '%Windows Server 2008%' Then 'Windows Server 2008'
  When opsys.Caption0 like '%Windows Server 2012%' Then 'Windows Server 2012'
  Else opsys.Caption0 
 END as [OS],
 CASE 
 WHEN opsys.CSDVersion0 is null THEN 'No SP'
 Else opsys.CSDVersion0
END as [Service Pack],
 vrs.Client_Version0 AS "Agent Version" 
 FROM
 v_R_System vrs
 LEFT Join v_R_User vru ON vrs.User_Name0 = vru.User_Name0
 Left Join v_GS_OPERATING_SYSTEM OPSYS on vrs.ResourceID = opsys.ResourceID
 Left Join v_GS_Computer_System compsys on vrs.ResourceID = compsys.ResourceID
 
  
 Inner Join v_FullCollectionMembership FCM ON vrs.ResourceID = FCM.ResourceID AND FCM.CollectionID = 'xxxx'
WHERE 
 
 vrs.Name0 not like 'unknown' 
ORDER BY
 vrs.name0

所以我需要将 LastHWScan 和 LastSWScan 添加到报告中,我尝试了这个对我的其他报告有效但我收到错误,"An item with the same key has already been added"。也许我只是没有看到它。希望有人可以帮助我。

Select distinct
vrs.AD_Site_Name0[AD Site],
  vrs.name0[Computer],
  vrs.User_Name0[Current User],
  vru.Unique_User_Name0[Account Name],
  vru.Full_User_Name0[Display Name],
  opsys.caption0[OS],
  vrs.Client0[Client],
  HWSCAN.LastHWScan[LastHWScan],
  SWSCAN.LastScanDate[LastSWScan],

  CASE
When compsys.SystemType0 like '%x86%'
Then 'x86'
When compsys.SystemType0 like '%x64%'
Then 'x64'
Else 'unknown'
END as[System Type],

  CASE
WHEN vrs.Name0 like 'OU%'
THEN 'OU'

ELSE 'Others'
END as[AD Site Name],

  CASE
WHEN opsys.Caption0 like '%Windows 7%'
THEN 'Windows 7'
WHEN opsys.Caption0 like '%Windows 8%'
Then 'Windows 8'
WHEN opsys.Caption0 like '%Windows 10%'
THEN 'Windows 10'
When opsys.Caption0 like '%Windows Server 2008%'
Then 'Windows Server 2008'
When opsys.Caption0 like '%Windows Server 2012%'
Then 'Windows Server 2012'
Else opsys.Caption0
END as[OS],
  CASE
WHEN opsys.CSDVersion0 is null THEN 'No SP'
Else opsys.CSDVersion0
END as[Service Pack],
  vrs.Client_Version0 AS "Agent Version"
FROM
v_R_System vrs
LEFT Join v_R_User vru ON vrs.User_Name0 = vru.User_Name0
Left Join v_GS_OPERATING_SYSTEM OPSYS on vrs.ResourceID = opsys.ResourceID
Left Join v_GS_Computer_System compsys on vrs.ResourceID = compsys.ResourceID
Left join v_GS_WORKSTATION_STATUS HWSCAN on vrs.resourceID = HWSCAN.resourceID
Left join v_GS_LastSoftwareScan SWSCAN on vrs.resourceID = SWSCAN.resourceID

Inner Join v_FullCollectionMembership FCM ON vrs.ResourceID = FCM.ResourceID AND FCM.CollectionID = 'xxx'
WHERE

vrs.Name0 not like 'unknown'
ORDER BY
vrs.name0

虽然 SQL 允许多个列具有相同的名称,但报表设计器不允许。 这就是为什么您可以预览查询但不能保存的原因。

所以你不能

opsys.caption0 [OS]

直接以及美化 os 名称的情况

  CASE
WHEN opsys.Caption0 like '%Windows 7%'
THEN 'Windows 7'
WHEN opsys.Caption0 like '%Windows 8%'
Then 'Windows 8'
WHEN opsys.Caption0 like '%Windows 10%'
THEN 'Windows 10'
When opsys.Caption0 like '%Windows Server 2008%'
Then 'Windows Server 2008'
When opsys.Caption0 like '%Windows Server 2012%'
Then 'Windows Server 2012'
Else opsys.Caption0
END as[OS]

如果您真的需要这两列,则必须将其中一列重命名为唯一的名称。

我不知道为什么这适用于前面的示例,但我不应该这样做。更改本身应该没问题。通常,对于此错误,最简单的方法是在预览(或 sql 工作室)中 运行 它并检查具有相同名称的多个列。