简体   繁体   English

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

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

In Google BigQuery using SQL, I have 2 separate queries that I want to merge into one.在使用 SQL 的 Google BigQuery 中,我有 2 个单独的查询要合并为一个。 They are both extracting the same fields from the same tables but for different for time, items and location.它们都从相同的表中提取相同的字段,但时间、项目和位置不同。 I don't want any cross over of data from one query to the other but I want the output together.我不希望从一个查询到另一个查询的任何数据交叉,但我希望 output 在一起。

Query 1查询 1

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

Query 2查询 2

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

Following are the unique data for each query:以下是每个查询的唯一数据:

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

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

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

I want both queries to extract the data separately (ie I don't want revenue for item 1678 in date 201501 (YYYYMM) or location 23456), once the data has been extracted I want it displayed in one table in the out put.我希望两个查询分别提取数据(即我不希望在日期 201501 (YYYYMM) 或位置 23456 中获得项目 1678 的收入),一旦数据被提取,我希望它显示在输出的一个表中。

Can anyone help.任何人都可以帮忙。 Thanks.谢谢。

This does seem pretty straightforward forward or am I missing something?这看起来很简单,还是我错过了什么? Have you tried using UNION ALL .您是否尝试过使用UNION ALL This will merge both your result into one:这会将您的结果合并为一个:

You need to make sure that both the queries separated by UNION or UNION ALL need to have the exact same number of columns.您需要确保由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

Or try it in one query like this:或者在这样的一个查询中尝试:

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