select x.PRODUCTCAT_NAME, x.SALE_OFFICE_NAME ,x.AREA_NAME, sum(x.COST_AMOUNT), sum(x.COST_NUM), sum(x.DELIVERY_NUM) from (SELECT
  D_PRODUCT_CATEGORY.PRODUCTCAT_NAME,
  D_SALE_OFFICE.SALE_OFFICE_NAME,
  D_AREA.AREA_NAME,
  0 DELIVERY_NUM,
  sum(F_FI_COST.COST_AMOUNT) COST_AMOUNT,
  sum(F_FI_COST.COST_NUM) COST_NUM
FROM
  D_PRODUCT_SERIES,
  D_PRODUCT_CATEGORY,
  D_SALE_OFFICE,
  D_AREA,
  F_FI_COST,
  D_PRODUCT,
  D_DATE,
  D_MONTH
WHERE
  ( D_PRODUCT_SERIES.PRODUCTCAT_ID=D_PRODUCT_CATEGORY.PRODUCTCAT_ID  )
  AND  ( D_SALE_OFFICE.AREA_ID=D_AREA.AREA_ID  )
  AND  ( F_FI_COST.PRODUCT_ID=D_PRODUCT.PRODUCT_ID  )
  AND  ( D_DATE.DATE_ID=F_FI_COST.DATE_ID  )
  AND  ( F_FI_COST.SALE_OFFICE_ID=D_SALE_OFFICE.SALE_OFFICE_ID  )
  AND  ( D_MONTH.MONTH_ID=D_DATE.MONTH_ID  )
  AND  ( D_PRODUCT.PRODUCTSERIES_ID=D_PRODUCT_SERIES.PRODUCTSERIES_ID  )
  AND  
  ( D_MONTH.MONTH_CODE  =  '201107'  )
GROUP BY
  D_PRODUCT_CATEGORY.PRODUCTCAT_NAME, 
  D_SALE_OFFICE.SALE_OFFICE_NAME, 
  D_AREA.AREA_NAME
union all
SELECT
  D_PRODUCT_CATEGORY.PRODUCTCAT_NAME,
  D_SALE_OFFICE.SALE_OFFICE_NAME,
  D_AREA.AREA_NAME,
  SUM( F_SALE_DELIVERY_MONTH.DELIVERY_NUM) DELIVERY_NUM,
  0 COST_AMOUNT,
  0 COST_NUM
FROM
  D_PRODUCT_SERIES,
  D_PRODUCT_CATEGORY,
  D_SALE_OFFICE,
  D_AREA,
  D_PRODUCT,
  D_PRODUCT_BATCH,
  D_MONTH,
  F_SALE_DELIVERY_MONTH
WHERE
  ( D_PRODUCT_SERIES.PRODUCTCAT_ID=D_PRODUCT_CATEGORY.PRODUCTCAT_ID  )
  AND  ( D_SALE_OFFICE.AREA_ID=D_AREA.AREA_ID  )
  AND  ( D_PRODUCT.PRODUCT_ID=D_PRODUCT_BATCH.PRODUCT_ID  )
  AND  ( D_MONTH.MONTH_ID=F_SALE_DELIVERY_MONTH.DELIVERY_MONTH_ID  )
  AND  ( F_SALE_DELIVERY_MONTH.SALE_OFFICE_ID=D_SALE_OFFICE.SALE_OFFICE_ID  )
  AND  ( F_SALE_DELIVERY_MONTH.PRODUCT_BATCH_ID=D_PRODUCT_BATCH.PRODUCT_BATCH_ID  )
  AND  ( D_PRODUCT.PRODUCTSERIES_ID=D_PRODUCT_SERIES.PRODUCTSERIES_ID  )
  AND  
  ( D_MONTH.MONTH_CODE  =  '201107'  )
GROUP BY
  D_PRODUCT_CATEGORY.PRODUCTCAT_NAME, 
  D_SALE_OFFICE.SALE_OFFICE_NAME, 
  D_AREA.AREA_NAME) x
group by 
x.PRODUCTCAT_NAME, x.SALE_OFFICE_NAME ,x.AREA_NAME

解决方案 »

  1.   

    可以的 在外面嵌套一层以后再减 在自查询里面记得取别名select 
      col,sum(a)-sum(b)
    from
      (
       select col,a,b from tb
       union all
       select col,a,b from ta
      )t
    group by
       col
      

  2.   

    union 是指两个可能不相关的查询,只要获得相同类型的数据列就可以合并,你可以分别作相应的运算,只要满足列数和对应列数据类型相同能合并就可以了.
      

  3.   

    我发的sql里面就有别名了还是不行啊
      

  4.   

    select x.PRODUCTCAT_NAME, x.SALE_OFFICE_NAME ,x.AREA_NAME, sum(x.COST_AMOUNT), sum(x.COST_NUM), sum(x.DELIVERY_NUM) -->select x.PRODUCTCAT_NAME, x.SALE_OFFICE_NAME ,x.AREA_NAME, sum(x.COST_AMOUNT) as a, sum(x.COST_NUM) as c, sum(x.DELIVERY_NUM) as d