2016-03-21 27 views
5

Tôi đã bị kẹt trong một truy vấn MS SQL SERVER 2012. gì tôi muốn, là viết nhiều giá trị trong điều hành "Case" trong "IN" tuyên bố của mệnh đề WHERE, thấy như sau:"CASE WHEN" toán tử trong câu lệnh "IN"

WHERE [CLIENT] IN (CASE WHEN T.[IS_PHYSICAL] THEN 2421, 2431 ELSE 2422, 2432 END) 

Vấn đề ở đây là trong năm 2421, 2431 - họ có thể không được tách ra với dấu phẩy . có giải pháp nào để viết điều này theo cách khác không? cảm ơn.

+0

bạn có thể vui lòng đăng câu hỏi đúng với dữ liệu mẫu – mohan111

+1

Tôi không nghĩ rằng 'WHEN T. [IS_PHYSICAL]' sẽ hoạt động. SQL Server muốn biểu thức boolean. –

+0

bạn nói đúng, nhưng tôi chỉ đăng dữ liệu giả với cùng một logic, và tôi đã nhận được câu trả lời. cảm ơn –

Trả lời

5

Điều này đơn giản hơn nếu bạn không sử dụng case trong mệnh đề where. Một cái gì đó như thế này:

where (T.[IS_PHYSICAL] = 1 and [client] in (2421, 2431)) or 
     (T.[IS_PHYSICAL] = 0 and [client] in (2422, 2432)) 
+0

cảm ơn rất nhiều, cách dễ dàng hơn. –

2

Tôi muốn sử dụng VÀ/HOẶC thay vì biểu thức dạng chữ.

WHERE (T.[IS_PHYSICAL] AND [CLIENT] IN (2421, 2431)) 
    OR (NOT T.[IS_PHYSICAL] AND [CLIENT] IN (2422, 2432)) 
2

Bạn có thể chia thành kết hợp AND và OR.

WHERE ((T.[IS_PHYSICAL]=1 AND [CLIENT] IN (2421, 2431)) 
     OR (T.[IS_PHYSICAL]=0 AND [CLIENT] IN (2422, 2432))) 
Các vấn đề liên quan