SCCM / SQL 多值到一列

问题描述

我有 SCCM 以下 sql 查询,它为每列返回 1 个 IP 地址,我想收集单个列的所有 IP(以分号分隔),因此我没有机器名称重复。 有什么建议吗?

目标是回归

服务器名称 IP 地址
服务器01 192.168.1.1;192.168.1.2;fe80::61d2:9748:f21f:d4f3

    SELECT
    disTINCT(cpu.SystemName0) AS [ServerName],IPA.IP_Addresses0 AS [IPAddress],CS.Manufacturer0 AS [Manufacturer],CS.Model0 AS [Model],PCB.SerialNumber0 AS [SerialNumber],PM.TotalPhysicalMemory0 AS [Memory]
 FROM [dbo].[v_GS_PROCESSOR] cpu
    LEFT OUTER JOIN dbo.v_GS_COmpuTER_SYstem CS
 ON CS.ResourceID = cpu.ResourceID
    LEFT OUTER JOIN dbo.v_GS_PC_BIOS PCB
 ON CS.ResourceID = PCB.ResourceID
    LEFT OUTER JOIN dbo.v_GS_X86_PC_MEMORY PM
 ON CS.ResourceID = PM.ResourceID
    LEFT OUTER JOIN dbo.v_RA_System_IPAddresses IPA
 ON CS.ResourceID = IPA.ResourceID
 GROUP BY
 cpu.SystemName0,IPA.IP_Addresses0,CS.Manufacturer0,CS.Model0,PCB.SerialNumber0,PM.TotalPhysicalMemory0
 ORDER BY [ServerName] ASC

解决方法

SELECT CONCAT(
   CPU.SystemName0,';',min(IPA.IP_Addresses0),min(CS.Manufacturer0),min(CS.Model0),min(PCB.SerialNumber0),min(PM.TotalPhysicalMemory0))
FROM [dbo].[v_GS_PROCESSOR] CPU
 LEFT OUTER JOIN dbo.v_GS_COMPUTER_SYSTEM CS
ON CS.ResourceID = CPU.ResourceID
 LEFT OUTER JOIN dbo.v_GS_PC_BIOS PCB
ON CS.ResourceID = PCB.ResourceID
 LEFT OUTER JOIN dbo.v_GS_X86_PC_MEMORY PM
ON CS.ResourceID = PM.ResourceID
 LEFT OUTER JOIN dbo.v_RA_System_IPAddresses IPA
ON CS.ResourceID = IPA.ResourceID
GROUP BY CPU.SystemName0
ORDER BY CPU.SystemName0 ASC