Sqlite 如何填写缺失的月份?
我有以下SQL: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'
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;