以下のようなテーブルがあります(SQL Server 2008 R2を使用):
CREATE TABLE [dbo].[Data](
[Id] [int] NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[IsBad] [bit] NOT NULL
) ON [PRIMARY]
GO
Insert into Data values(100,'Book!',1)
Insert into Data values(100,'Booklki**',1)
Insert into Data values(100,'Book',0)
Insert into Data values(100,'New Book ~~',1)
Insert into Data values(100,'New Book',0)
Insert into Data values(100,'B00k…>',1)
Insert into Data values(101,'Tim3#',1)
Insert into Data values(101,'%Timer%',1)
Insert into Data values(101,'T1mer**',1)
Insert into Data values(101,'Tim6',1)
Insert into Data values(101,'Time@me',1)
Insert into Data values(102,'ABC',0)
Insert into Data values(102,'CDE',0)
ID
すべてを持っているものをすべて選択する必要がありますIsBad = 1
。したがって、上記のテーブルをクエリすると、IDが返されます101
。戻してはいけません。102
または100
、これらのIDに少なくとも1つあるためIsBad=0
です。
以下のクエリを試してみました
select id,count(distinct isBad) as Total
from Data
group by id
having count(distinct isBad)= 1
このクエリには、すべてを含むIDが含まれますIsBad=0
。しかし、私はそれを必要としません。having
を使用して句にさらに条件を追加しようとしましAND
たが、エラーが発生しました。
どうやって進める ?どんな助けでも大歓迎です。
編集:5000万レコードのテーブルに対してクエリを実行する必要があります。したがって、より短い時間で結果を返すようにクエリを最適化する必要があります。