2013-02-18 6 views
11

Czy można użyć CASE, aby zwrócić określony ciąg, jeśli nie ma wyników z mojej instrukcji SELECT?Używanie CASE do zwracania ciągu znaków, jeśli nie ma wyników z instrukcji SELECT

Przykład:

DECLARE @accountnumber AS VARCHAR(10) 

SET @accountnumber = 'account number to search' 

SELECT 
    CASE 
    WHEN account IS NOT NULL 
    THEN 'We Have Records of this Customer' 
    WHEN account IS NULL 
    THEN 'We Do Not Have Records For This Customer' 
    END AS 'result' 
FROM call_records 
WHERE account = @accountnumber 
GROUP BY account 

Powyższe nie działa, ponieważ jeśli numer konta szukam nie jest obecny w moim stole dzienników wtedy nie byłoby żadnych rezultatów i komunikat „Nie mamy Records Dla tego klienta "nigdy by się nie zmaterializował.
Potrafię zrobić to, co próbuję osiągnąć za pomocą czystego T-SQL za pomocą polecenia PRINT, ale pracuję z aplikacją innej firmy, a wyniki muszą być w formie tabeli (więc tylko instrukcje SELECT).

+0

Może istnieć więcej niż jeden pasujący rekord dla 'rozliczeniowa w' call_records'? Jeśli tak, to po prostu chcesz uzyskać wynik w jednym wierszu? –

+1

@MartinSmith: Zwróć uwagę na ostatnią linijkę dostarczonego zapytania (pominięte, gdy po raz pierwszy przeczytałem pytanie). –

+0

@MarkBannister - Dobry punkt. Nawet jeśli są, to zwróci pojedynczy wiersz. –

Odpowiedz

20

Można użyć EXISTS:

SELECT 
    CASE 
    WHEN EXISTS(
     SELECT 1 FROM call_records 
     WHERE account = @accountnumber 
    ) 
    THEN 'We Have Records of this Customer' 
    ELSE 'We Do Not Have Records For This Customer' 
    END AS 'result'; 
6

Spróbuj:

DECLARE @accountnumber AS VARCHAR(10) 

SET @accountnumber = 'account number to search' 

SELECT 
    CASE 
    WHEN account IS NOT NULL 
    THEN 'We Have Records of this Customer' 
    WHEN account IS NULL 
    THEN 'We Do Not Have Records For This Customer' 
    END AS 'result' 
FROM (select 1 dummy) dummy 
left join call_records ON account = @accountnumber 
GROUP BY account 
Powiązane problemy