Sql 在没有传递行的情况下填充0值

Sql 在没有传递行的情况下填充0值,sql,google-bigquery,bigquery-standard-sql,Sql,Google Bigquery,Bigquery Standard Sql,我试图找到没有传递的实例,并将值返回为0,但是由于传递为0,因此当天没有数据行 这是一个简单的查询,可以在交付时提取数据 select date(timestamp_micros(delivered_on)) as day, coalesce(delivery,0) as value from delivery_table 我所希望的是以下几点: **day |value** 8/10/19 |123 8/11/19 |456 8/12/19 |0 我的

我试图找到没有传递的实例,并将值返回为0,但是由于传递为0,因此当天没有数据行

这是一个简单的查询,可以在交付时提取数据

select 
  date(timestamp_micros(delivered_on)) as day,
  coalesce(delivery,0) as value
from
  delivery_table
我所希望的是以下几点:

**day      |value**

8/10/19  |123

8/11/19  |456

8/12/19  |0

我的实际结果是:

**day      |value**

8/10/19  |123

8/11/19  |456

您可以使用一个日历表来存储您希望在报告中显示的所有日期。大概是这样的:

WITH dates AS (
    SELECT '2019-08-10' AS dt UNION ALL
    SELECT '2019-08-11' UNION ALL
    SELECT '2019-08-12'
)

SELECT
    d.dt,
    COALECSE(t.value, 0) AS value
FROM dates
LEFT JOIN delivery_table t
    ON d.dt = t.day;

实际上,您可能不会使用CTE作为日历表,而是生成一个日期序列,或者只是创建一个包含实际日期的真实表。

您可以使用一个日历表来存储您希望在报告中显示的所有日期。大概是这样的:

WITH dates AS (
    SELECT '2019-08-10' AS dt UNION ALL
    SELECT '2019-08-11' UNION ALL
    SELECT '2019-08-12'
)

SELECT
    d.dt,
    COALECSE(t.value, 0) AS value
FROM dates
LEFT JOIN delivery_table t
    ON d.dt = t.day;

实际上,您可能不会使用CTE作为日历表,而是生成一个日期序列,或者只是创建一个包含实际日期的真实表。

使用
生成日期数组()


使用
生成日期数组()


您将需要创建一个临时表,其中包含日期列表和
左连接
,否则,如果没有相应的行可供选择,则无法在结果集中获取行。您需要创建一个临时表,其中包含日期列表,并将其左键连接到您的
交货表中,否则,如果没有相应的行可供选择,则无法在结果集中获取行。生成日期表似乎是一种非常低效的方法。我将
声明
一个临时int,并通过
插入dates DATEADD(day,@Startdate,@DateIndex)
(实际代码当然取决于RDM)。@daShier我只使用了一个CTE来简化查询的解释。如前所述,在BigQuery(或任何其他版本的SQL)中有更好的方法生成日历表。生成日期表似乎是一种非常低效的方法。我将
声明
一个临时int,并通过
插入dates DATEADD(day,@Startdate,@DateIndex)
(实际代码当然取决于RDM)。@daShier我只使用了一个CTE来简化查询的解释。如前所述,在BigQuery(或任何其他版本的SQL)中有更好的方法生成日历表。