SQL显示所有未满足所有记录条件的密钥ID

时间:2014-09-16 20:15:28

标签: sql sql-server

我有一个包含4列的数据库表,用于存储“页面”在我的应用程序中经历的不同状态的条目:

Id | PageId | State | TimeStamp

Id是唯一的,PageId是页面唯一的GUID,State是以下四种之一:

QUEUED
REQUESTED
PUBLISHED
COMMITTED

TimeStampdatetime

在成功条件下,每个PageId数据库中有四个条目:按照上面的顺序,每个条目对应一个状态。

我想写一个查询,它会给我所有没有COMMITTED状态的页面。我正在使用SQL Server。我不确定如何编写查询。提前谢谢。

2 个答案:

答案 0 :(得分:4)

如果你想要那些PageId的每一行:

SELECT *
FROM dbo.YourTable A
WHERE NOT EXISTS (SELECT 1 FROM dbo.YourTable
                  WHERE PageId = A.PageId
                  AND [State] = 'COMMITTED')

如果您只想要PageId:

SELECT DISTINCT A.PageId
FROM dbo.YourTable A
WHERE NOT EXISTS (SELECT 1 FROM dbo.YourTable
                  WHERE PageId = A.PageId
                  AND [State] = 'COMMITTED')

答案 1 :(得分:2)

另一种可能性

SELECT PageId 
FROM   YourTable 
GROUP  BY PageId 
HAVING Count(CASE 
               WHEN State = 'Committed' THEN 1 
             END) = 0