2009-09-02 45 views
13

Tôi có một biến gọi là @status mà ta đã đặt câu lệnh select này:làm cách nào để chọn cột dựa trên điều kiện?

Select 
ordr_num as num, 
ordr_date as date, 
ordr_ship_with as shipwith 
From 
order 
where ordr_num = @ordrNum 

tôi chỉ muốn chọn ordr_ship_with cột nếu @status <> 'Cancelled', nếu không tôi muốn chọn null cho shipwith. Làm cách nào để tôi thực hiện việc này?

+0

cách tốt nhất là không lưu toàn bộ từ 'Đã hủy' trong cột trạng thái. trạng thái có thể là một char (1) với các giá trị "C" = bị hủy, "O" = mở, "D" = đã xóa, "P" = đã xử lý, v.v. –

+0

Tôi đồng ý. Hoặc sử dụng trường 'TinyInt' để bạn có thể có nhiều trạng thái và bản đồ hơn bằng cách sử dụng mã enum. – strider

Trả lời

26
SELECT ordr_num as num, ordr_date as date, 
    CASE WHEN @status<>'Cancelled' THEN ordr_ship_with ELSE NULL END as shipwith 
FROM order 
WHERE ordr_num = @ordrNum 
+0

Trước hết cảm ơn bạn vì câu trả lời này, đã giúp tôi rất nhiều. Làm thế nào có thể sử dụng cột được trả về bởi CASE WHEN trên điều kiện WHERE? Tôi đã cố gắng sử dụng AS T và cố gắng truy cập T trong phần WHERE nhưng không thành công. Cảm ơn bạn. – Jacob

+1

Bạn phải nhập lại hoặc lồng truy vấn này và đặt điều kiện ở phần bên ngoài. Sql là ngu ngốc theo cách đó đôi khi. –

3

Hãy thử này ra

Select 
    ordr_num as num, 
    ordr_date as date, 
    CASE 
     WHEN @Status <> 'Cancelled' THEN ordr_ship_with 
     ELSE NULL END 
    as shipwith 
From order 
where ordr_num = @ordrNum 

Mặc dù tôi có một cảm giác rằng bạn TRẠNG là một cột thực tế trong bảng Order. Trong trường hợp đó, làm điều này:

Select 
    ordr_num as num, 
    ordr_date as date, 
    CASE 
     WHEN Status <> 'Cancelled' THEN ordr_ship_with 
     ELSE NULL END 
    as shipwith 
From order 
where ordr_num = @ordrNum 
0

CHỌN TRƯỜNG HỢP
KHI @status <> 'hủy' THEN ordr_ship_with
ELSE rỗng
END AS shipwith, ... các lĩnh vực khác

1
Select 
    ordr_num as num, 
    ordr_date as date, 
    CASE WHEN @status <> 'Cancelled' THEN ordr_ship_with ELSE NULL END as shipwith 
From 
    order where ordr_num = @ordrNum 
Các vấn đề liên quan