我在使用SQL查詢時遇到困難。我正在使用sqlite。在sqlite中使用Case語句,麻煩得到我正在尋找的結果
我有一個表expenses
。我試圖使用CASE
語句來選擇和求和值。下面是一些樣本數據:
這是沒有得到想要什麼,我查詢...
SELECT e.category,
CASE
WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)
WHEN e.schedule = 'Daily' THEN SUM(e.amount)*28.000000
WHEN e.schedule = 'Mon - Fri' THEN SUM(e.amount)*20
WHEN e.schedule = 'Weekly' THEN SUM(e.amount)*4.000000
WHEN e.schedule = 'Every 4 Weeks' THEN SUM(e.amount)*1.083333333333
WHEN e.schedule = 'Monthly' THEN SUM(e.amount)*1
ELSE 0
END
AS totalValue FROM expenses e GROUP BY e.category ORDER BY e.category
下面就是查詢返回的照片。
我想什麼的總價值來查看Housing
420,這是因爲有三個記錄與category
「住房」,其中一個具有「無」(記錄ID 2)的schedule
和創建在一月。另外兩個(記錄10和16)每月有一個schedule
。在我CASE
我儘量只用created_at
比二月的第一個更大的選擇的時間表:
WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)
或者比「無」以外的時間表值,在這種情況下:
WHEN e.schedule = 'Monthly' THEN SUM(e.amount)
不幸我得到了495(300 + 120 + 75)的結果。如果它找到符合案例陳述的記錄,則它將所有記錄與特定的category
相加!
請你幫我改寫的情況下,使我得到我正在尋找的結果。
感謝您的回答,我會檢查,看看這是否有所需的結果。謝謝。然而,實際上,我確實在組中有e.category,請參閱上面查詢中的最後一行:'AS totalValue FROM expenses e GROUP BY e.category ORDER BY e.category' – LpLrich
謝謝上班!真是一種解脫,謝謝。 – LpLrich