2015-09-10 76 views
1

我的查询是:UNION查询

SELECT BRAND,BRAND_GROUP, SUB_BRAND ,SUM(INCOME) AS TOTAL_INCOME FROM 
"tema".MMT WHERE BRAND_GROUP IS NULL AND SUB_BRAND IS NULL GROUP BY 
BRAND,BRAND_GROUP,SUB_BRAND 

UNION 
SELECT BRAND,BRAND_GROUP, SUB_BRAND ,SUM(INCOME) AS TOTAL_INCOME FROM 
"tema".BGT WHERE BRAND_GROUP IS NULL AND SUB_BRAND IS NULL GROUP BY 
BRAND,BRAND_GROUP,SUB_BRAND; 

和我的输出是:

BRAND BRAND_GROUP SUB_BRAND TOTAL_INCOME 
----- ----------- --------- ------------ 
GBS NULL  NULL    10000 
SWG NULL  NULL    10000 
GBS NULL  NULL    20000 
STG NULL  NULL    20000 
GTS NULL  NULL    30000 

的问题是,我有2个类别的品牌,我想刚才1.筛选:

Brand  Brand_Group  Sub_brand  Total_Income 
GBS     -   -   30000 
STG     -   -   20000 
GTS     -   -   30000 
SWG     -   -   10000 

有人可以帮助我一个ideea?

回答

0

我认为你想把你的UNION查询下拉成一个子查询,然后对结果进行求和,如下所示。

SELECT 
    BRAND 
    ,BRAND_GROUP 
    ,SUB_BRAND 
    ,SUM(INCOME) AS TOTAL_INCOME 
FROM (
    SELECT 
     BRAND 
     ,BRAND_GROUP 
     ,SUB_BRAND 
     ,INCOME 
    FROM "tema".MMT 
    WHERE BRAND_GROUP IS NULL 
     AND SUB_BRAND IS NULL 
    GROUP BY 
     BRAND 
     ,BRAND_GROUP 
     ,SUB_BRAND 

     UNION ALL 

    SELECT 
     BRAND 
     ,BRAND_GROUP 
     ,SUB_BRAND 
     ,INCOME 
    FROM "tema".BGT 
    WHERE BRAND_GROUP IS NULL 
     AND SUB_BRAND IS NULL 
    GROUP BY 
     BRAND 
     ,BRAND_GROUP 
     ,SUB_BRAND 
) tbl 
GROUP BY 
    BRAND 
    ,BRAND_GROUP 
    ,SUB_BRAND 

两点意见:

  • 我改变了你的查询中使用UNION ALL VS UNION,因为UNION将消除重复。
  • 如果您只获取那些列为空的行,您是否需要选择BRAND_GROUPSUB_BRAND?对我来说似乎有点多余。