2011-11-11 49 views
5

Tiếp theo truy vấn oracle tuân thủ và hoạt động tốt:Trường hợp trong Oracle mệnh đề WHERE

SELECT Employee.EmployeeId, 
    Employee.EmployeeName, 
    Employee.Description , 
    Employee.IsFrozen 
FROM employee, employeerole, roledef 
where employee.employeeid = employeerole.employeeid 
and employeerole.roleid = roledef.roleid 
and rolename IN 
(case 
when (1 < 2) THEN ('Owner Role') 
when (2 < 1) THEN ('Eval Owner Role') 
END); 

Bây giờ trong trường hợp của tôi, tôi muốn thêm vào thứ hai khi tức (2 < 1) hai rolename ('Chủ đầu tư Vai trò' và ' Đánh giá vai trò chủ sở hữu '). Vui lòng đề xuất thay đổi truy vấn ở trên.

Xin cảm ơn trước.

-Justin Samuel

+2

'2 <1' luôn là sai. Bạn đang cố gắng làm gì? –

+0

Tôi biết ... chỉ cần biên dịch truy vấn. Hoặc người nào khác cho phép đảo ngược khi trường hợp. Tôi chỉ có nghĩa là biên dịch .... –

Trả lời

10

Tại sao sử dụng CASE? Tại sao không chỉ đơn giản là

AND ( ((1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role')) 
    OR ((2 < 1) and rolename IN ('Eval Owner Role'))) 

Tôi giả định rằng bạn không thực sự có vị từ đó được mã hóa cứng để đánh giá là TRUE (1 < 2) hoặc FALSE (2 < 1) và rằng những người đang thực sự ràng buộc các biến trong mã thực tế của bạn.

Nếu bạn thực sự muốn sử dụng một tuyên bố CASE, bạn có thể mã

AND(CASE WHEN (1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role') 
      THEN 1 
      WHEN (2 < 1) and rolename IN ('Eval Owner Role') 
      THEN 1 
      ELSE 0 
     END) = 1 

nhưng đó sẽ là nhiều khó khăn hơn cho tôi ưu để đối phó với và ít nhiều rõ ràng cho các nhà phát triển có để duy trì nó.

+0

Điều này đã giải quyết được vấn đề. Cảm ơn Justin vì điều này! –

+0

Tuy nhiên, như "ypercube" đề nghị tôi đã tìm kiếm một cái gì đó bằng cách sử dụng báo cáo CASE. Nhưng không thể giải quyết vấn đề bằng cách sử dụng CASE. Nhưng điều này chắc chắn là một cách khác để đạt được như vậy! :) –

+0

@Justin - Tôi đã cập nhật câu trả lời bằng ví dụ sử dụng câu lệnh 'CASE'. Nhưng như tôi đã đề cập, thường không phải là một ý tưởng hay để viết mã theo cách đó. –

Các vấn đề liên quan