2010-10-07 174 views
6

如果不使用自定義函數,是否有可能在SQLite中執行以下操作。我有兩個表格,它們通過常用的ID號碼進行鏈接。在第二個表中,有兩個變量。我想要做的是能夠返回結果列表,其中包括:行ID,如果這兩個變量的所有實例(可能多於兩個)都爲NULL,則爲NULL,如果它們都爲0,則返回NULL 2,如果一個或多個是1「if,then,else」in SQLite

我現在所擁有的是如下:


SELECT 
    a.aid, 
    (SELECT count(*) from W3S19 b WHERE a.aid=b.aid) as num, 
    (SELECT count(*) FROM W3S19 c WHERE a.aid=c.aid AND H110 IS NULL AND H112 IS NULL) as num_null, 
    (SELECT count(*) FROM W3S19 d WHERE a.aid=d.aid AND (H110=1 or H112=1)) AS num_yes 
FROM W3 a 

那麼,這需要被逐步執行每個結果如下(粗糙的Python僞代碼):


if row['num_yes'] > 0: 
    out[aid] = 2 
elif row['num_null'] == row['num']: 
    out[aid] = 'NULL' 
else: 
    out[aid] = 1 

有沒有更簡單的方法?謝謝!

回答

23

使用CASE...WHEN,例如,

CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END 

瞭解更多從SQLite syntax manual(去節 「CASE表達式」)。

+0

非常好,我的感謝! – 2010-10-07 15:13:11

1

還有另一種方法,對於數字值,對於某些特定情況可能更容易。 它是基於一個事實,即布爾值是1或0,「如果條件」給出了一個布爾結果:

(這將只用於「或」條件,依賴於使用)

SELECT (w1=TRUE)*r1 + (w2=TRUE)*r2 + ... 

當然@埃文的答案是通用的,正確的答案