0

这是我之前的问题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
4

0 回答 0