是的,你可以用case語句這樣
SELECT Column1,
CASE WHEN Column2 IS NOT NULL AND Column3='Value' THEN 'Testing #1'
WHEN Column3 IS NULL AND Column2='Test Value' THEN 'Testing #2'
ELSE 'Testing #3' END as customcol
FROM MyTable
編輯重寫它:好了,因爲根據您的意見,也有我們需要解決兩個問題我想提出這個編輯。 (我將離開原來的答案,因爲它可以幫助某人。)
1)結果集應該被過濾,並且不應該有else
部分。
這實際上可以通過此解決方案實現,因爲else
是可選的,數據可以使用最後的where子句過濾。
2)如果匹配條件,可以多次使用不同的Testing #
值來選擇相同的行。
然而,這是我以前的解決方案無法實現的。所以我想到了另一個。希望它適合你的情況。這裏是
S1 - 用Testing #
值(Testing #1
,Testing #2
,Testing #3
等)創建一個新表格。假設這個表格被命名爲Testing
。
S2 - 將您的主表(MyTable
)與包含Testing #
值的Testing
表聯接起來。因此,現在您可以將各種實際數據和測試值組合在一起。
S3 - 使用where子句過濾不想出現的結果。
S4 - 過濾實際數據< - >測試組合,並附加where子句。
末的查詢應該是這個樣子:
SELECT M.Column1, T.TestingValue
FROM MyTable M
INNER JOIN Testing T ON 1=1
WHERE
(
(M.Column2 IS NOT NULL AND M.Column3='Value' AND T.TestingValue='Testing #1') OR
(M.Column3 IS NULL AND M.Column2='Test Value' AND T.TestingValue='Testing #2') OR
<conditions for other testing values>
)
AND
<other conditions>
我認爲這應該工作,併產生你想要的結果。但由於我沒有這些數據,我無法運行基於工會的解決方案的任何基準。所以我沒有任何科學證據表明這個速度更快,但它是一種選擇。你可以測試兩者並使用更好的。
它可能有點晚,但希望這可以解決您的問題。
使用case語句... –
我們在這裏測試多少列或僅僅是列2和3? – maSTAShuFu
@RhianA,有六列 – user194076