不幸的是,基本的方法是重複自己。
SELECT
CASE WHEN <condition 1> THEN <a1> WHEN <condition 2> THEN <a2> ELSE <a3> END,
CASE WHEN <condition 1> THEN <b1> WHEN <condition 2> THEN <b2> ELSE <b3> END
FROM
<table>
幸運的是,大多數RDBMS足夠聰明,不必多次評估條件。這只是多餘的打字。
在MS SQL Server(2005+),你可以使用可能CROSS應用來替代這一點。雖然我不知道它是怎麼高性能...
SELECT
*
FROM
<table>
CROSS APPLY
(
SELECT a1, b1 WHERE <condition 1>
UNION ALL
SELECT a2, b2 WHERE <condition 2>
UNION ALL
SELECT a3, b3 WHERE <condition 3>
)
AS case_proxy
這裏的noticable缺點是沒有ELSE當量,因爲所有的條件可以所有的返回值,他們需要的是隻有這樣陷害人們可以一次成爲真實的人。
編輯
如果呸的應答改變爲一個UNION,而不是加盟的方式,它變得非常類似於此。但是,主要區別在於它只掃描一次輸入數據集,而不是每個條件掃描一次(在您的情況下爲100次)。
編輯
我也注意到,您可以意味着由CASE語句返回的值是固定的。所有匹配相同條件的記錄在值1和值2中獲得完全相同的值。這可以形成這樣的...
WITH
checked_data AS
(
SELECT
CASE WHEN <condition1> THEN 1
WHEN <condition2> THEN 2
WHEN <condition3> THEN 3
...
ELSE 100
END AS condition_id,
*
FROM
<table>
)
,
results (condition_id, value1, value2) AS
(
SELECT 1, a1, b1
UNION ALL
SELECT 2, a2, b2
UNION ALL
SELECT 3, a3, b3
UNION ALL
...
SELECT 100, a100, b100
)
SELECT
*
FROM
checked_data
INNER JOIN
results
ON results.condition_id = checked_data.condition_id
這是MS SQL Server的? – MatBailie
是的,這是...... – yzhang
你能澄清你的情況嗎?例如,100個不同的情況條件是否會導致value1和value2中的每個值有100個不同的適用值,或者100個不同的條件中的很多是否會產生相同的結果?條件是不同領域的完全組合嗎?或者它們是單一領域的不同可能值? –