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