2010-11-18 6 views
2

1行しか返さないSQLクエリがあります。複数の行がある場合はnullを返したいSQLサーバーは単一の行またはnullのみを返します

私は

SELECT whatever FROM MyTable 
WHERE something = myQuery 
    AND (COUNT(SELECT whatever FROM MyTable 
      WHERE something = myQuery) = 1) 

のようなものでそれを行うことができますねそれはかなり厄介だと私はそれを行うための滑らかな印象の方法として、もしそこに疑問に思いました。

答えて

4

カントあなたは:

SELECT whatever FROM 
    (
     SELECT whatever, COUNT(*) As NumRecords 
     FROM MyTable 
     WHERE something = myQuery 
     GROUP BY whatever 
     HAVING NumRecords = 1 
    ) 
+1

+1を追加することができますが、私はこれは非常にいいneatest – fearofawhackplanet

+0

だと思います。キスは常に良いです。 –

1

あなたは、単一の行をチェックし、唯一その場合は選択しIF句を使用することができます。

IF SELECT COUNT(*) FROM MyTable WHERE something = myQuery) = 1 
    BEGIN 
    SELECT whatever FROM MyTable 
    WHERE something = myQuery 
    END 
+0

私は混乱しています - それは最初のIFとの彼の元のクエリですか?編集:ちょうどあなたの編集を見た:) – RPM1984

+0

はまだ2つのクエリが必要です - IMOは必要ありません – RPM1984

+0

@ RPM1984 - 返される複数の列がある場合、あなたのバージョンは確かに単一のクエリです... – Oded

1

まあ、別の方法は次のようになります。

select f1, f2, f3 
    from your_table 
where f4 = f5*2 
group by f1, f2, f3 
having count(1) = 1 

あなたの解決策よりもうまくないかどうかわかりません。

0

セット行数1

select文の前。

その後、

セットの行数0

0

私たちは、このあまりにもみんなに

SELECT max(whatever) as whatever 
FROM MyTable 
WHERE something = myQuery 
HAVING COUNT(*) = 1 
関連する問題