2013-03-25 32 views
1

我在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。猜猜一月份的上述查询没有条目。那么它应该显示数量为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 2013-03-25 07:46:37

+0

那么也许使用'SUM(ISNULL(数量,0))'甚至尝试'IFFNULL'。这里的关键是,如果在SUM中有一个带NULL值的记录,它将返回NULL。因此,使用'SUM'内的函数来将'NULL'值替换为'0'。 – Rachcha 2013-03-25 07:48:27

+0

但是没有带'NULL'值的记录,没有记录。 – 2013-03-25 08:40:38