Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 如何填写缺失的月份?_Sqlite - Fatal编程技术网

Sqlite 如何填写缺失的月份?

Sqlite 如何填写缺失的月份?,sqlite,Sqlite,我有以下SQL: SELECT STRFTIME('%m', date) ord, CASE STRFTIME('%m', date) WHEN '01' THEN 'January' WHEN '02' THEN 'Febuary' WHEN '03' THEN 'March'

我有以下SQL:

  SELECT STRFTIME('%m', date) ord,
         CASE STRFTIME('%m', date) WHEN '01' THEN 'January' 
                                   WHEN '02' THEN 'Febuary'
                                   WHEN '03' THEN 'March' 
                                   WHEN '04' THEN 'April' 
                                   WHEN '05' THEN 'May' 
                                   WHEN '06' THEN 'June' 
                                   WHEN '07' THEN 'July' 
                                   WHEN '08' THEN 'August' 
                                   WHEN '09' THEN 'September' 
                                   WHEN '10' THEN 'October' 
                                   WHEN '11' THEN 'November' 
                                   WHEN '12' THEN 'December' 
         ELSE '' END AS month,
         count(*) AS count 
    FROM events 
   WHERE type='Birth' AND 
         date <> '' 
GROUP BY month,ord
ORDER BY ord
但正如你所看到的,它有差距。有没有办法用0计数来填充缺少的月份?

研究外部联接

运行以下命令一次:

CREATE TABLE months (
  mm char(2),
  name char(10)
);
INSERT INTO months VALUES ('01', 'January');
INSERT INTO months VALUES ('02', 'Febuary');
INSERT INTO months VALUES ('03', 'March');
INSERT INTO months VALUES ('04', 'April');
INSERT INTO months VALUES ('05', 'May');
INSERT INTO months VALUES ('06', 'June');
INSERT INTO months VALUES ('07', 'July');
INSERT INTO months VALUES ('08', 'August');
INSERT INTO months VALUES ('09', 'September');
INSERT INTO months VALUES ('10', 'October');
INSERT INTO months VALUES ('11', 'November');
INSERT INTO months VALUES ('12', 'December');
然后运行以下命令:

  SELECT m.mm AS ord,
         m.name AS month,
         count(e.date) AS count
    FROM months m LEFT OUTER JOIN events e
      ON strftime('%m', e.date) = m.mm
   WHERE e.type='Birth' AND 
         e.date <> '' 
GROUP BY month,ord
ORDER BY ord;
选择m.mm作为ord,
m、 以月份命名,
计数(如日期)作为计数
从左m个月开始外部连接事件e
在strftime(“%m”,e.date)=m.mm
其中e.type='Birth'和
e、 日期“
按月分组,ord
ord命令;

试着用这个例子:这就是TSQL中解决类似问题的方法:不确定SQLite的功能,但我认为可以实现类似的逻辑。
  SELECT m.mm AS ord,
         m.name AS month,
         count(e.date) AS count
    FROM months m LEFT OUTER JOIN events e
      ON strftime('%m', e.date) = m.mm
   WHERE e.type='Birth' AND 
         e.date <> '' 
GROUP BY month,ord
ORDER BY ord;