Sql server MSSQL-检查不存在其他值的位置
相对简单的一个(我想),但我不太确定怎么做 我有一组数据,我想返回结果不好的ID,例如,在下面的集合中,只应返回100。200应排除在外,因为其结果为“良好”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
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'吗?不需要在里面。