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 工作室)中 运行 它并检查具有相同名称的多个列。
我在 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 工作室)中 运行 它并检查具有相同名称的多个列。