在Union All BigQuery SQL中,where子句是否可以引用另一个where子句?

在Union All BigQuery SQL中,where子句是否可以引用另一个where子句?,sql,google-bigquery,Sql,Google Bigquery,我正在玩弄BQ SQL,想知道是否可以在整个UNION-ALL语句中包含一个WHERE子句。因此,与其拥有多个不同的WHERE子句并必须更改所有这些子句以运行单个查询,不如将其全部链接到单个WHERE子句,其中所有内容都将根据单个更改而更改。下面是我正在做的工作的一个示例: WITH Temp_A AS( SELECT DISTINCT Name, Date, Spend FROM Spend_Table ), Temp_B AS( S

我正在玩弄BQ SQL,想知道是否可以在整个
UNION-ALL
语句中包含一个
WHERE
子句。因此,与其拥有多个不同的
WHERE
子句并必须更改所有这些子句以运行单个查询,不如将其全部链接到单个
WHERE
子句,其中所有内容都将根据单个更改而更改。下面是我正在做的工作的一个示例:

 WITH Temp_A AS(
   SELECT DISTINCT
     Name,
     Date,
     Spend
   FROM
     Spend_Table
),
Temp_B AS(
   SELECT DISTINCT
     Name,
     Date,
     Revenue
   FROM
     Revenue_Table
),
Temp_C AS(
   SELECT DISTINCT
     Employee AS Name,
     Date,
     Paystub_Range,
     Hourly,
     Total_Amount
   FROM
     Employee_Pay
)
SELECT DISTINCT
   a.Name,
   a.Date,
   a.Spend,
   b.Revenue,
   NULL AS Paystub_Range,
   NULL AS Hourly,
   NULL AS Total_Amount
FROM
   Temp_A a

LEFT JOIN
   Temp_B b
ON
   a.Name = b.Name
   AND a.Date = b.Date

WHERE
   DATE BETWEEN '2020-09-01' AND '2020-09-15'

UNION ALL

SELECT DISTINCT
  Name,
  Date,
  NULL AS Spend,
  NULL AS Revenue,
  Paystub_Range,
  Hourly,
  Total_Amount
FROM
  Temp_C

WHERE
   DATE BETWEEN '2020-09-01' AND '2020-09-15'
我想要实现的或是看看是否可能的是,与AS数据的
的概念相同,但是有一个
WHERE
语句,或者第二个
WHERE
语句引用第一个
语句。例如,下面是与上面相同类型的虚拟数据,只需执行
selectdistinct
final version。相同的临时表/等

)

SELECT DISTINCT
   a.Name,
   a.Date,
   a.Spend,
   b.Revenue,
   NULL AS Paystub_Range,
   NULL AS Hourly,
   NULL AS Total_Amount
FROM
   Temp_A a

LEFT JOIN
   Temp_B b
ON
   a.Name = b.Name
   AND a.Date = b.Date

WHERE
   DATE BETWEEN '2020-09-01' AND '2020-09-15'

UNION ALL

SELECT DISTINCT
  Name,
  Date,
  NULL AS Spend,
  NULL AS Revenue,
  Paystub_Range,
  Hourly,
  Total_Amount
FROM
  Temp_C

WHERE
   DATE BETWEEN @DateA AND @DateB
或者有没有另一种我忽略的方法可以让事情变得更简单?任何帮助都将不胜感激,因为我仍在尽我所能学习这方面的知识,以便从长远来看更容易。请让我知道,如果我需要扩大任何细节,再次这只是虚拟数据


提前谢谢你

可以通过两种方式完成:(1)编写变量脚本和(2)参数化查询

(1) 脚本变量-声明变量,然后在查询中使用它们

DECLARE from_date DATE DEFAULT '2020-09-01';
DECLARE to_date DATE DEFAULT '2020-09-15';

...your query...
WHERE DATE BETWEEN from_date AND to_date 
...rest of the query...
(2) 参数化查询-在BigQuery UI上不受支持,但在BQ CLI和客户端库上您可以使用它们

例如,如果使用BQ CLI,可以执行以下操作:

bq query \
--use_legacy_sql=false \
--parameter='from_date:DATE:2020-09-01' \
--parameter='to_date:DATE:2020-09-15' \
'SELECT
...your query...
WHERE DATE BETWEEN @from_date AND @to_date 
...rest of the query...'