繁体   English   中英

Google BigQuery - 将两个查询合并为一个(sql)

[英]Google BigQuery - Merge two Queries into one (sql)

在使用 SQL 的 Google BigQuery 中,我有 2 个单独的查询要合并为一个。 它们都从相同的表中提取相同的字段,但时间、项目和位置不同。 我不希望从一个查询到另一个查询的任何数据交叉,但我希望 output 在一起。

查询 1

SELECT Revenue_Date, Item_Number,Location_Number, Revenue_Group, Revenue_Value,COUNT (Ticket_Number)
FROM 收入表
WHERE Revenue_Date ("201501","201502","201601",201602")
AND Item_Number ("2987","9876","2345")
AND Location_Number ("23456","23456","0987")
AND(Revenue_Group 不在 ("123B","765C",345G","3456") 或 Revenue_Group 为空)
GROUP BY Revenue_Date、Item_Number、Location_Number、Revenue_Value、Revenue_Group

查询 2

SELECT Revenue_Date, Item_Number,Location_Number, Revenue_Group, Revenue_Value,COUNT (Ticket_Number)
FROM 收入表
WHERE Revenue_Date ("201502","201503","201602",201603")
AND Item_Number ("1678","2225","1098")
AND Location_Number ("09876","23456","2111")
AND(Revenue_Group 不在 ("123B","765C",345G","3456") 或 Revenue_Group 为空)
GROUP BY Revenue_Date、Item_Number、Location_Number、Revenue_Value、Revenue_Group

以下是每个查询的唯一数据:

日期查询1 Revenue_Date ("201501","201502","201601",201602")
查询 2 Revenue_Date ("201502","201503","201602",201603")

项目查询 1 Item_Number ("2987","9876","2345")
查询 2 Item_Number ("1678","2225","1098")

位置查询 1 Location_Number ("23456","23456","0987")
查询 2 Location_Number ("09876","23456","2111")

我希望两个查询分别提取数据(即我不希望在日期 201501 (YYYYMM) 或位置 23456 中获得项目 1678 的收入),一旦数据被提取,我希望它显示在输出的一个表中。

任何人都可以帮忙。 谢谢。

这看起来很简单,还是我错过了什么? 您是否尝试过使用UNION ALL 这会将您的结果合并为一个:

您需要确保由UNIONUNION ALL分隔的两个查询需要具有完全相同的列数。

SELECT 
Revenue_Date
,Item_Number 
,Location_Number
,Revenue_Group
,Revenue_Value
,COUNT(Ticket_Number)   
FROM  
Revenue_Table  
WHERE 
Revenue_Date ('201501','201502','201601','201602')  
AND Item_Number ('2987','9876','2345')  
AND Location_Number ('23456','23456','0987')  
AND (Revenue_Group NOT IN ('123B','765C','345G','3456') 
OR Revenue_Group IS NULL)  
GROUP BY 
Revenue_Date
,Item_Number 
,Location_Number
,Revenue_Value 
,Revenue_Group

UNION ALL

SELECT 
Revenue_Date
,Item_Number 
,Location_Number
,Revenue_Group
,Revenue_Value 
,COUNT(Ticket_Number)  
FROM  
Revenue_Table  
WHERE 
Revenue_Date ('201502','201503','201602','201603')  
AND Item_Number ('1678','2225','1098')  
AND Location_Number ('09876','23456','2111')  
AND (Revenue_Group NOT IN ('123B','765C','345G','3456') OR Revenue_Group IS NULL)  
GROUP BY 
Revenue_Date
,Item_Number 
,Location_Number
,Revenue_Value 
,Revenue_Group

或者在这样的一个查询中尝试:

SELECT Revenue_Date, Item_Number ,Location_Number, Revenue_Group, Revenue_Value,COUNT (Ticket_Number)
FROM Revenue_Table
WHERE
    (( Revenue_Date ("201501","201502","201601",201602")
      AND Item_Number ("2987","9876","2345")
      AND Location_Number ("23456","23456","0987")
    )
    OR
    (
     Revenue_Date ("201502","201503","201602",201603")
     AND Item_Number ("1678","2225","1098")
     AND Location_Number ("09876","23456","2111")
    ))
    AND (Revenue_Group NOT IN ("123B","765C",345G","3456") or Revenue_Group is null)
GROUP BY Revenue_Date, Item_Number ,Location_Number,Revenue_Value ,Revenue_Group;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM