2011-09-03 25 views
6

Trong truy vấn dưới đây, tôi muốn thêm điều kiện AND vào trong WHEN của CASE và trước khi THEN có thể xảy ra?Trường hợp khi đó, nhưng với điều kiện AND bên trong khi và trước đó

ví dụ KHI 'R' và table1.name = "jones" THEN 'rất cao'

SELECT table1.id, table1.name, 
    CASE table1.event 
    WHEN 'r' THEN 'very high' 
    WHEN 't' THEN 'very low' 
    ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value 
      ORDER BY table2.value DESC LIMIT 1) 
    END AS risk 
FROM table1 
ORDER BY FIELD(table1.event, 'r', 'f', 't'), table1.value DESC 

Trả lời

20

Bạn có thể viết lại tuyên bố của bạn như thế này để thực hiện những gì bạn muốn

SELECT table1.id, table1.name, 
    CASE 
    WHEN table1.event = 'r' AND table1.name = 'jones' THEN 'very high' 
    WHEN table1.event = 't' AND table1.name = 'smith' THEN 'very low' 
    ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value 
      ORDER BY table2.value DESC LIMIT 1) 
    END AS risk 
FROM table1 
ORDER BY FIELD(table1.event, 'r', 'f', 't'), table1.value DESC 

thông báo rằng bạn cần xóa table1.event một fter tuyên bố CASE. documentation here

+0

+1, tôi đã chỉnh sửa ý tưởng đó vào câu trả lời của tôi khi bạn đăng này =) – jadarnel27

+1

@ jadarnel217 haha ​​cảm ơn, tôi sẽ +1 câu trả lời của bạn quá, vì nó giống nhau. –

4

Bất cứ thứ gì để đánh giá một boolean (đúng hoặc sai) có thể đi trong điều kiện WHEN của một CASE tuyên bố. Vì vậy, bạn có thể thay thế 'r' với:

('r' AND table1.name='jones')

Suy nghĩ về chi tiết này, bạn có thể phải mất table1.event sau CASE

SELECT table1.id, table1.name, 
    CASE 
     WHEN (table1.event = 'r' AND table1.name='Jones') THEN 'very high' 
     WHEN table1.event = 't' THEN 'very low' 
     ELSE (SELECT table2.risk 
       FROM table2 
       WHERE table2.value <= table1.value 
       ORDER BY table2.value DESC LIMIT 1) 
    END AS risk 
FROM table1 
ORDER BY FIELD(table1.event, 'r', 'f', 't'), table1.value DESC 
3

Chuyển từ case <column> when <value> then ... để case when <condition> then ...:

CASE 
WHEN table1.event = 'r' AND table1.active = 1 THEN 'very high' 
... 
Các vấn đề liên quan