SCCM SQL Query multiple columns aggregation

J.S 156 Reputation points
2020-12-23T12:19:19.397+00:00

Hi,
I have the SCCM Following SQL query that returns 1 IP address for each column, I wanted to collect all IPs for a single column (separated by semicolon ) so I don't have machine name duplicates.
Any suggestions?

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
SQL Server
SQL Server
A family of Microsoft relational database management and analysis systems for e-commerce, line-of-business, and data warehousing solutions.
12,811 questions
Microsoft Configuration Manager
0 comments No comments
{count} votes

Accepted answer
  1. AllenLiu-MSFT 40,881 Reputation points Microsoft Vendor
    2020-12-24T06:20:28.247+00:00

    @J.S
    Thank you for posting in Microsoft Q&A forum.
    Try this query:

    SELECT  
        DISTINCT(CPU.SystemName0) AS [ServerName],  
     STUFF((SELECT ', ' + IPA.IP_Addresses0  
              FROM v_RA_System_IPAddresses  IPA  
              WHERE IPA.ResourceID = CPU.ResourceID  
              FOR XML PATH('')), 1, 1, '') [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  
     ORDER BY [ServerName] ASC  
    

    If the response is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


1 additional answer

Sort by: Most helpful
  1. Viorel 112.5K Reputation points
    2020-12-23T13:44:30.47+00:00

    If you want a comma-separated list of distinct IP addresses, then try something like this:

    select string_agg([IPAddress], ', ') as IPAddresses
    from
    (
        select distinct [IPAddress]
        from
        (
            Your query without ORDER BY
        ) d
    ) d
    

    Or give details if you need something else. (Maybe show the current and desired results).

    0 comments No comments