2013-02-18 34 views
11

Có thể sử dụng CASE để trả về một chuỗi nhất định nếu không có kết quả từ câu lệnh SELECT của tôi không?Sử dụng CASE để trả về một chuỗi Nếu không có kết quả từ câu lệnh SELECT

Ví dụ:

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 

Ở trên không làm việc vì nếu số tài khoản tôi đang tìm kiếm là không có mặt trong bảng nhật ký của tôi thì sẽ không có kết quả và thông báo 'Chúng tôi không có hồ sơ Đối với khách hàng này 'sẽ không bao giờ thực hiện.
Tôi có thể làm những gì tôi đang cố gắng để đạt được bằng T-SQL thuần túy với lệnh PRINT, nhưng tôi đang làm việc với ứng dụng của bên thứ 3 và kết quả phải ở dạng bảng (do đó chỉ có câu lệnh SELECT).

+0

Có thể có được nhiều hơn một bản ghi tương ứng cho một 'account' trong 'call_records'? Nếu vậy bạn chỉ muốn một kết quả hàng duy nhất? –

+1

@MartinSmith: Lưu ý dòng cuối cùng của truy vấn được cung cấp (tôi đã bỏ lỡ nó khi lần đầu đọc câu hỏi). –

+0

@MarkBannister - Tốt. Ngay cả khi có thì nó sẽ trả về một hàng duy nhất. –

Trả lời

20

Bạn có thể sử dụng 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

Hãy thử:

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 
Các vấn đề liên quan