我有一个表(currency_table),其中有3列“日期”,“货币”,“费率”。
我必须使用以下语法查询
select date, rate from currency_table where date in ('20010101','20190921','20190920');
表(currency_table)中没有20010101的数据
所以我得到的结果像 2019-09-20 1200 2019-09-21 1200.1
但是如果没有值,我必须返回甚至为“ null”
我该怎么做?
还有一个问题
结果始终按日期显示。
我可以收到我写的结果命令吗?
答案 0 :(得分:0)
您需要在此处使用称为 calendar 的表格,该表格可以跟踪您要在报告中显示的所有日期。一个例子是解释的最佳方法:
SELECT
d.date,
COALESCE(t.rate, 0.0) AS rate
FROM
(
SELECT '2001-01-01' AS date UNION ALL
SELECT '2019-09-21' UNION ALL
SELECT '2019-09-20'
) d
LEFT JOIN currency_table t
ON d.date = t.date AND
WHERE
d.date IN ('2001-01-01', '2019-09-21', '2019-09-20')
ORDER BY
d.date;
在实践中,您可能会用一个包含所有可能要报告货币汇率的日期的真实表替换我标记为d
的子查询。请注意,由于我在上面使用了左联接,因此可以确保日历表中的每个日期都将出现在结果集中。但是,对于不匹配的日期,将出现0.0
的比率(该比率在现实世界中可能永远不会发生)。