这是我之前的问题Find max count of query (SQL Server 2016)
Q1) 如何获取每个虚拟机的 NIC 计数?例如
VirtualMachineName vCenter Cluster NicCount
------------------ --------- ----------- --------
virtualMachine1 vCenter1 Cluster1a 1
virtualMachine2 vCenter1 Cluster1b 1
virtualMachine3 vCenter2 Cluster2a 1
virtualMachine4 vCenter1 Cluster1b 2
这是到目前为止的查询:
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]
问题是 NicCount 的某些行的值为零。我知道这是不正确的,因为此查询显示所有虚拟机至少有一个 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
如果 WHERE 子句未注释 NicCount = NULL 而不是 NicCount = 0。
提前致谢。
编辑 2016-03-05 以将名称更改为“如何从包含两个内部连接的查询中获取 NIC 计数 (SQL Server 2016)”,这可能会掩盖问题。
编辑 2018-03-08:正如建议的那样,我包括示例数据:
表:虚拟机
VirtualMachineID VirtualMachineName HostId IsManaged
---------------- ------------------ ------ ---------
0 virtualMachine1 0 0
1 virtualMachine2 1 0
2 virtualMachine3 3 0
3 virtualMachine4 1 0
4 virtualMachine5 3 1
表:主机
HostId Hostname ProvisioningAgentID
------ ---------- -------------------
0 Cluster1a 0
1 Cluster1b 0
2 Cluster2a 1
表:VMToNetwork
VirtualMachineID MacAddress
---------------- ----------
0 MacAddr1
1 MacAddr2
2 MacAddr3
3 MacAddr4
3 MacAddr5
4 MacAddr6
表:代理
AgentID AgentName
-------- ---------
0 vCenter1
1 vCenter2