4
Create table #Tbl
(
ID int not null,
Keyword nvarchar(max)
)
Insert into #Tbl Values ('0','Cryptography')
Insert into #Tbl Values ('1','Cryptography')
Insert into #Tbl Values ('4','Cryptography')
Insert into #Tbl Values ('0','SQL')
Insert into #Tbl Values ('0','SQL')
Insert into #Tbl Values ('3','Cloud Computing')
Insert into #Tbl Values ('6','Recursion')
Insert into #Tbl Values ('8','Recursion')
Insert into #Tbl Values ('0','Universe')
Insert into #Tbl Values ('0','Universe')
Insert into #Tbl Values ('7','Universe')

複数の ID があり、少なくとも 1 つの ID がゼロであるタイトルを取得する必要があります。

したがって、期待される結果は次のようになります。

Cryptography
Universe

以下のクエリを試しましたが、「少なくとも 1 つの ID がゼロです」という条件を追加できませんでした

select Keyword,COUNT(distinct id) from #Tbl
group by Keyword
having COUNT(distinct id)>1

どうすればここに進むことができますか? ご協力いただきありがとうございます。

4

4 に答える 4

4

IDが0から始まると仮定すると、以下が機能するはずです

select Keyword,COUNT(distinct id) from #Tbl
group by Keyword
having COUNT(distinct id)>1 and MIN(id) = 0
于 2013-06-05T17:11:12.710 に答える
3

これを行うには多くの方法があります。一例を次に示します。

SELECT DISTINCT Keyword
FROM #Tbl T
WHERE EXISTS (SELECT 1 FROM #Tbl WHERE Keyword = T.Keyword
              AND ID = 0)
AND EXISTS (SELECT 1 FROM #Tbl WHERE Keyword = T.Keyword
              AND ID != 0)

これはデモ付きのsqlfiddleです。

于 2013-06-05T17:11:27.790 に答える
2

これはそれを行う必要があります:

SELECT Keyword
FROM  #Tbl
WHERE Keyword IN (SELECT DISTINCT Keyword FROM #Tbl WHERE ID = 0)
GROUP BY Keyword
HAVING COUNT(DISTINCT id) > 1
于 2013-06-05T17:11:05.563 に答える
1

さらに別のアプローチがあります:

SELECT Keyword, COUNT(DISTINCT ID)
FROM #Tbl
GROUP BY Keyword
HAVING COUNT(DISTINCT ID) > ALL (SELECT COUNT(DISTINCT NULLIF(ID, 0)) UNION ALL SELECT 1)
;
于 2013-06-05T17:32:00.340 に答える