How to get NIC count for each virtual machine (SQL Server 2016)

178 Views Asked by At

This is a follow-up to my earlier question Find max count of query (SQL Server 2016)

Q1) How do I get the NIC count per virtual machine? e.g.

VirtualMachineName  vCenter    Cluster      NicCount
------------------  ---------  -----------  --------
virtualMachine1     vCenter1   Cluster1a           1
virtualMachine2     vCenter1   Cluster1b           1
virtualMachine3     vCenter2   Cluster2a           1
virtualMachine4     vCenter1   Cluster1b           2

This is the query so far:

SELECT
  VirtualMachine.VirtualMachineName,
  Agent.EndpointName AS vCenter,
  Host.HostName AS [vSphere Cluster],
  (
    SELECT count( VMToNetwork.MacAddress )
    FROM   VirtualMachine AS VirtualMachineInner
            INNER JOIN VMToNetwork
              ON VirtualMachineInner.VirtualMachineID = VMToNetwork.VirtualMachineID
    WHERE VirtualMachineInner.VirtualMachineID = VirtualMachine.VirtualMachineID 
  ) AS NicCount
FROM
  VirtualMachine 
   INNER JOIN Host
    ON VirtualMachine.HostID = Host.HostID
     INNER JOIN Agent
      ON Host.ProvisioningAgentID = Agent.AgentID
GROUP BY
  Agent.EndpointName,
  Host.HostName,
  VirtualMachine.VirtualMachineName, 
  VirtualMachine.VirtualMachineID,
  VirtualMachine.IsManaged
HAVING
  (VirtualMachine.IsManaged <> 1)
ORDER BY
  VirtualMachine.VirtualMachineName,
  vCenter,
  [vSphere Cluster]

The problem is that NicCount has a value of zero for some rows. I know this is not correct because this query shows that all virtual machines have at least one NIC:

SELECT
  VirtualMachineInner.VirtualMachineName,
  count( VMToNetwork.MacAddress )
FROM
  VirtualMachine AS VirtualMachineInner
   INNER JOIN VMToNetwork
    ON VirtualMachineInner.VirtualMachineID = VMToNetwork.VirtualMachineID
--WHERE VirtualMachineInner.VirtualMachineID = VirtualMachine.VirtualMachineID 
GROUP BY
  VirtualMachineInner.VirtualMachineName

If the WHERE clause is uncommented NicCount = NULL instead NicCount = 0.

Thanks in advance.

Edit 2016-03-05 to change name from "How to get NIC count from query that includes two inner joins (SQL Server 2016)" which might have obscured the question.

Edit 2018-03-08: As suggested I am including sample data:

Table: VirtualMachine

VirtualMachineID   VirtualMachineName  HostId  IsManaged
----------------   ------------------  ------  ---------
               0   virtualMachine1          0          0
               1   virtualMachine2          1          0
               2   virtualMachine3          3          0
               3   virtualMachine4          1          0
               4   virtualMachine5          3          1

Table: Host

HostId  Hostname   ProvisioningAgentID
------  ---------- -------------------
     0  Cluster1a                    0
     1  Cluster1b                    0
     2  Cluster2a                    1

Table: VMToNetwork

VirtualMachineID  MacAddress
----------------  ----------
               0    MacAddr1
               1    MacAddr2
               2    MacAddr3
               3    MacAddr4
               3    MacAddr5
               4    MacAddr6

Table: Agent

AgentID  AgentName
--------  ---------
       0  vCenter1
       1  vCenter2
0

There are 0 best solutions below