2015-09-10 4 views
1

Мой запрос:UNION запрос в DB2

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 

Может кто-нибудь помочь мне с идеей?

ответ

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 против UNION, потому что UNION устранит дубликаты.
  • Вам нужно выбрать BRAND_GROUP и SUB_BRAND, если вы получаете только строки, которые являются нулевыми для этих столбцов? Кажется мне несколько лишним.