在Union All BigQuery SQL中,where子句是否可以引用另一个where子句?
我正在玩弄BQ SQL,想知道是否可以在整个在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
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...'