查找具有相同列值的行对

时间:2019-07-25 17:29:58

标签: sql-server

使用SQL Server,我有一个对设备集合建模的数据库表。每个设备控制一个或多个区域,每个区域可以离线或在线。

我不能遇到同一地区在多个设备上在线的情况。

表“ FEP”模式为:

region_address [int]
region         [int]
online         [bit]

样本数据:

region_address  region   online      
3001100         100      0
3002100         100      1
3002200         200      0
3002241         241      0
3001123         123      0
3003123         123      1
3928999         999      1
3921999         999      1

我需要此查询来将区域999列为在两个(或更多)列出的设备上处于联机状态。

我使用一个简单的select * from fep order by region来直观地查看是否有两个连续的行的online = 1,但这并不表示仅冲突区域。

1 个答案:

答案 0 :(得分:2)

我会做些简单

SELECT region
FROM FEP
WHERE online = 1
GROUP BY region
HAVING COUNT(*) > 1

Having count(distinct online)=1的问题是说有3台设备,有2台在线,而1台没有。因此,count(在线区别)等于2,但是仍然有多个设备在线,您不会被发现。上面说明了这一点,即使设备中有NULL值,它也考虑了设备(假设条件是至少有2台设备在线)