2010-11-18 33 views
2

Sadece 1 satır döndürmek istediğim bir SQL sorgum var. Birden çok satır varsa, boş dönmek istiyorum.SQL server yalnızca tek satırlık veya boş değer döndürüyor

ben

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

gibi bir şeyle bunu yapabiliyor tahmin ama bu çok tiksindirici ve ben bunu yapmanın daha düzgün yolu olarak eğer orada merak etti.

cevap

4

Cant yapın: Eğer durum buysa

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

+1 ama bu çok güzel Neatest – fearofawhackplanet

+0

olduğunu düşünüyorum. KISS her zaman daha iyidir. –

1

Tek bir satır için kontrol edin ve sadece seçmek için bir IF maddesini kullanabilirsiniz:

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

Kafam karıştı - Bu başlangıçta bir IF ile orijinal sorgusu mu? DÜZENLEME: sadece düzenleme gördüm, :) – RPM1984

+0

@ RPM1984 - Sizin sürümün gerçekten tek bir sorgu, ancak, eğer geri döndürülecek birden fazla sütun varsa ... – Oded

+0

Evet, true - ama bunu değiştirerek, 'her ne olursa olsun' (alt sorgudaki bir iç birleşim için seçin, gruplandırma bir alan üzerinde kalır) ancak dış sorgu tüm sütunları seçer. – RPM1984

1

Eh, başka bir yol olabilir:

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

Çözümünüzden daha temiz olup olmadığını bilmiyorum.

0

satır sayısını ayarlama 1

Seçme ifadesinden önce. Daha sonra

,

seti Rowcount

0

0 Biz de bu şekilde ekleyebilir, herkese

SELECT max(whatever) as whatever 
FROM MyTable 
WHERE something = myQuery 
HAVING COUNT(*) = 1 
İlgili konular