と選択した行の私のテーブルはこのように見えた場合、私は、例えば= 1 IDを持っていない行(名前)を見つけようとしている:TSQL - 同じ列Aが、別の列B
Name ID
--------------
A 1
A 0
B 1
B 0
C 0
D 2
D 0
このクエリの答えは次のようになります。
Name
-----
C
D
ご存知ですか?ここで
と選択した行の私のテーブルはこのように見えた場合、私は、例えば= 1 IDを持っていない行(名前)を見つけようとしている:TSQL - 同じ列Aが、別の列B
Name ID
--------------
A 1
A 0
B 1
B 0
C 0
D 2
D 0
このクエリの答えは次のようになります。
Name
-----
C
D
ご存知ですか?ここで
それを行うための一つの方法は次のとおりです。
SELECT DISTINCT Name
FROM Table t0
WHERE NOT EXISTS
(
SELECT 1
FROM Table t1
WHERE t0.Name = t1.Name
AND t1.Id = 1
)
SELECT Name
FROM myTable
GROUP BY Name
HAVING SUM(CASE WHEN ID = 1 THEN 1 ELSE 0 END) = 0
は、SUM(CASE ID = 1つのTHEN ELSE 1 0 END)=をHAVING 0はHAVING COUNT(ID)= 1に等しいか? –
@SQL_M:いいえ、それは(レコード番号 '1'の場合は 'ID = 1 THEN')= 0'です。名前ごとにID = 1の出現を数えます。 'HAVING COUNT(ID)= 1'は' HAVING COUNT(*)= 1'を意味するので、それは全く異なっています。 –
Select Distinct name
From myTable
Where name not in (Select name From myTable Where id= 1)
は、この文字列で検索してください:
SELECT DISTINCT(name)
FROM tbl t1
WHERE
NOT EXISTS (SELECT name FROM tbl t2 WHERE ID=1 AND t1.name=t2.name)
それは受け入れられた答えと同じです。それ以外には、 'DISTINCT(name)'の括弧を削除してください。彼らは属していません。 'DISTINCT'は関数ではありません。 'SELECT DISTINCT firstname、lastname'の代わりに' SELECT DISTINCT(firstname)、(lastname) 'を書いてはいけません。 –
gotqnの答えははるかに良いです。ここでテーブルを複数回クエリする必要はありません。名前ごとのステートメントだけが必要な場合は、名前でグループ化します。 –