您好我是SQL新手并遇到问题。首先描述我想要做的事情。我有一个选择查询来连接3个表以最终得到数据,这些数据为我提供了一组不同群集中的esx主机以及主机上每个vmnic所看到的VLAN中继。现在,我需要浏览此列表,找到群集中具有与其他群集不匹配的vmnics的每个主机,因为我们希望vLAN中继在特定群集中所有主机上的vmnics上进行匹配。在我运行查询后给出我的结果示例 -
------------------------------------------------------------
| Cluster | Host | VMNIC | VLAN_TRUNK |
------------------------------------------------------------
| clst001 | c1hst1 | vmnic01 | 401 501-505 508 709 1505 |
| clst001 | c1hst1 | vmnic02 | 401 501-505 709 |
| clst001 | c1hst1 | vmnic03 | 401 501-505 508 709 1505 |
| clst001 | c1hst2 | vmnic01 | 401 501-505 508 709 1505 |
| clst001 | c1hst2 | vmnic02 | 401 501-505 508 709 1505 |
| clst001 | c1hst2 | vmnic03 | 401 501-505 508 709 1505 |
| clst001 | c1hst3 | vmnic01 | 401 501-505 508 709 1505 |
| clst001 | c1hst3 | vmnic02 | 401 501-505 508 709 1505 |
| clst001 | c1hst3 | vmnic03 | 401 501-505 508 709 1505 |
| clst002 | c2hst1 | vmnic01 | 408 501-505 522 701 1555 |
| clst002 | c2hst1 | vmnic04 | 408 501-505 522 701 1555 |
| clst002 | c2hst1 | vmnic05 | 408 501-505 522 701 1555 |
| clst002 | c2hst2 | vmnic01 | 408 501-505 522 701 1555 |
| clst002 | c2hst2 | vmnic04 | 408 501-505 701 1555 |
| clst002 | c2hst2 | vmnic05 | 408 501-505 522 701 1555 |
| clst002 | c2hst3 | vmnic01 | 408 501-505 522 701 1555 |
| clst002 | c2hst3 | vmnic04 | 408 501-505 |
| clst002 | c2hst3 | vmnic05 | 408 501-505 522 701 1555 |
| clst003 | c3hst1 | vmnic01 | 505 622 745 |
| clst003 | c3hst1 | vmnic02 | 505 622 745 |
| clst003 | c3hst2 | vmnic01 | 505 622 745 |
| clst003 | c3hst2 | vmnic02 | 505 622 745 |
------------------------------------------------------------
请注意,我使用文本编辑器构建了上述描述,以直观地展示我所看到的内容。
我希望实现的是能够根据群集和主机识别唯一的VLAN_TRUNK。例如,我想从上表中确定每个集群和主机中有问题的主机vlans是 -
------------------------------------------------------------
| Cluster | Host | VMNIC | VLAN_TRUNK |
------------------------------------------------------------
| clst001 | c1hst1 | vmnic02 | 401 501-505 709 |
| clst002 | c2hst2 | vmnic04 | 408 501-505 701 1555 |
| clst002 | c2hst3 | vmnic04 | 408 501-505 |
------------------------------------------------------------
我有大约4000个这样的行,大约有100个集群,每个集群都有不同数量的主机和vmnics。
我尝试过使用count,distinct功能,但这对我来说效果不佳。由于此网站在工作时被阻止,因此我很难发布查询,所以我在家里发帖。如果有人能指出我如何解决这个问题的正确方向,那将非常感谢!
答案 0 :(得分:0)
你真的应该显示你到目前为止所尝试的内容,但假设我理解你的问题,可以用COUNT来完成。
以下是您提供的数据的示例。看一下SQL语句,您将看到如何对感兴趣的列执行COUNT
和GROUP BY
。然后,我们将其限制为COUNT
为1,以获得“不同”列表。
DECLARE @Data AS TABLE (Cluster VARCHAR(20), Host VARCHAR(20), VMNIC VARCHAR(20), VLAN_TRUNK VARCHAR(200))
INSERT INTO @Data (Cluster, Host, VMNIC, VLAN_TRUNK)
VALUES
('clst001', 'c1hst1', 'vmnic01', '401 501-505 508 709 1505'),
('clst001', 'c1hst1', 'vmnic02', '401 501-505 709'),
('clst001', 'c1hst1', 'vmnic03', '401 501-505 508 709 1505'),
('clst001', 'c1hst2', 'vmnic01', '401 501-505 508 709 1505'),
('clst001', 'c1hst2', 'vmnic02', '401 501-505 508 709 1505'),
('clst001', 'c1hst2', 'vmnic03', '401 501-505 508 709 1505'),
('clst001', 'c1hst3', 'vmnic01', '401 501-505 508 709 1505'),
('clst001', 'c1hst3', 'vmnic02', '401 501-505 508 709 1505'),
('clst001', 'c1hst3', 'vmnic03', '401 501-505 508 709 1505'),
('clst002', 'c2hst1', 'vmnic01', '408 501-505 522 701 1555'),
('clst002', 'c2hst1', 'vmnic04', '408 501-505 522 701 1555'),
('clst002', 'c2hst1', 'vmnic05', '408 501-505 522 701 1555'),
('clst002', 'c2hst2', 'vmnic01', '408 501-505 522 701 1555'),
('clst002', 'c2hst2', 'vmnic04', '408 501-505 701 1555'),
('clst002', 'c2hst2', 'vmnic05', '408 501-505 522 701 1555'),
('clst002', 'c2hst3', 'vmnic01', '408 501-505 522 701 1555'),
('clst002', 'c2hst3', 'vmnic04', '408 501-505'),
('clst002', 'c2hst3', 'vmnic05', '408 501-505 522 701 1555'),
('clst003', 'c3hst1', 'vmnic01', '505 622 745'),
('clst003', 'c3hst1', 'vmnic02', '505 622 745'),
('clst003', 'c3hst2', 'vmnic01', '505 622 745'),
('clst003', 'c3hst2', 'vmnic02', '505 622 745')
SELECT Cluster, Host, VLAN_TRUNK, COUNT(*) Cnt
FROM @Data
GROUP BY Cluster, Host, VLAN_TRUNK
HAVING COUNT(*) = 1