Sql server MSSQL-检查不存在其他值的位置

Sql server MSSQL-检查不存在其他值的位置,sql-server,Sql Server,相对简单的一个(我想),但我不太确定怎么做 我有一组数据,我想返回结果不好的ID,例如,在下面的集合中,只应返回100。200应排除在外,因为其结果为“良好” UID ID Date/Time Result 1 100 02/04/2014 08:00 Bad 2 200 02/04/2014 08:05 Bad 3 100 03/04/2014 08:10 Bad 4 100 03/04/2014

相对简单的一个(我想),但我不太确定怎么做

我有一组数据,我想返回结果不好的ID,例如,在下面的集合中,只应返回100。200应排除在外,因为其结果为“良好”

    UID ID  Date/Time           Result
    1   100 02/04/2014 08:00    Bad
    2   200 02/04/2014 08:05    Bad
    3   100 03/04/2014 08:10    Bad
    4   100 03/04/2014 08:20    Bad
    5   200 03/04/2014 09:00    Bad
    6   200 03/04/2014 18:00    Good
谢谢你试试这个

SELECT ID FROM TABLE1
WHERE RESULT = 'BAD' AND 
      NOT EXISTS (SELECT * FROM WHERE RESULT = 'GOOD')

翻译标题:使用
不存在

SELECT t.*
FROM dbo.TableName t
WHERE NOT EXISTS
(
   SELECT 1 FROM dbo.TableName t2
   WHERE t.ID = t2.ID AND t2.Result = 'Good'
)

全部

SELECT t.*
FROM dbo.TableName t
WHERE 'Bad' = ALL(
   SELECT t2.Result FROM dbo.TableName t2
   WHERE t.ID = t2.ID 
)

如果您想要完整的行,而不仅仅是
ID
s,您可以使用两个窗口聚合:

declare @t table (UID int,ID int,dt datetime,Result varchar(19))
insert into @t(UID,ID,dt,Result) values
(1,100,'2014-04-02T08:00:00','Bad'),
(2,200,'2014-04-02T08:05:00','Bad'),
(3,100,'2014-04-03T08:10:00','Bad'),
(4,100,'2014-04-03T08:20:00','Bad'),
(5,200,'2014-04-03T09:00:00','Bad'),
(6,200,'2014-04-03T18:00:00','Good')

;With MinMax as (
    select *,
        MIN(Result) OVER (PARTITION BY ID) as minR,
        MAX(Result) OVER (PARTITION BY ID) as maxR
    from @t
)
select UID,ID,dt,Result from MinMax
where minR = maxR and minR = 'Bad'
因为当特定行的最小值和最大值相等时,您知道所有观察到的值都相等

结果:

UID         ID          dt                      Result
----------- ----------- ----------------------- -------------------
3           100         2014-04-03 08:10:00.000 Bad
4           100         2014-04-03 08:20:00.000 Bad
1           100         2014-04-02 08:00:00.000 Bad

是否希望ID的不同值不与良好结果关联? 差不多

SELECT DISTINCT ID
FROM   myTable
WHERE  ID NOT IN (SELECT ID FROM myTable WHERE Result = 'Good')
我们应该做到这一点

如果需要“坏”ID的所有数据,则

SELECT *
FROM   myTable
WHERE  ID NOT IN (SELECT ID FROM myTable WHERE Result = 'Good')

你就不能用RESULT='BAD'吗?不需要在里面。