2013-03-25 2 views
1

Я preaty слабый в sqlite-запросах.Запрос, чтобы отобразить нуль, сумма записей в этом месяце равна 0

У меня есть набор записей в базе данных sqlite. Я хочу найти сумму, сгруппированную в месяцах.

SELECT SUM(QUANTITY) quantity, strftime('%m', CREATED_ON) month FROM OrderItemBIT WHERE (strftime('%Y%m',CREATED_ON) BETWEEN '201210' AND '201303') group by month 

Проблема заключается в том, что если нет входа для определенного месяца, я хочу, чтобы запись должна отобразить счетчик в ноль, но теперь его не показывает ничего.

Ex. угадайте, нет записи для месяца Jan для вышеуказанного запроса. то оно должно отображать количество как 0.

Может кто поможет решить эту проблему !!! Спасибо за помощь

ответ

2

Один из способов сделать это - создать временную таблицу, содержащую список имен месяцев, затем JOIN с вашей таблицей. Или вы можете создать его на лету; что-то вроде:

SELECT 
    m.MonthName, 
    IFNULL(SUM(o.QUANTITY), 0) quantity 
FROM 
(
    SELECT 'January' AS MonthName 
    UNION ALL 
    SELECT 'March' 
    UNION ALL 
    ... 
) AS Months 
LEFT JOIN OrderItemBIT AS o ON o.month = strftime('%m', o.CREATED_ON) 
WHERE (strftime('%Y%m', o.CREATED_ON) BETWEEN '201210' AND '201303') 
group by m.MonthName; 
0
SELECT SUM(COALESCE(QUANTITY, 0)) 
     , strftime('%m', CREATED_ON) month 
    FROM OrderItemBIT 
    WHERE (strftime('%Y%m',CREATED_ON) BETWEEN '201210' AND '201303') 
GROUP BY month 
+0

Нет, это не работает .. – user1838670

+0

Тогда, возможно использовать 'SUM (ISNULL (КОЛИЧЕСТВА, 0))' или даже попробовать 'IFFNULL'. Ключ здесь состоит в том, что если в 'SUM' есть запись с значением NULL', она возвращает' NULL'. Итак, используйте функцию внутри 'SUM', чтобы заменить значения« NULL »на« 0 ». – Rachcha

+0

Но нет записей с значениями «NULL», записей нет. –

Смежные вопросы