2017-07-31 41 views
0

我有以下2個查詢,我使用UNION ALL加入了查詢。對於count(distinct ID)列和count(distinct src_id)列,查詢結果應該位於不同的列中。對於count(distinct id),別名將爲ID1,對於count(distinct SRC_ID),別名將爲VOL。另外我的查詢結果應該看起來像這樣在Excel中提到。我想以這種格式得到這個結果,因爲我想把查詢結果粘貼到excel中,如果我在查詢本身格式化它,它會減少我的手動工作。我以前直接嘗試使用PLSQL Procedure並在Excel中獲得結果,但看起來非常複雜。我收到錯誤消息,因爲在那裏我有使用UNION ALL如何使用不同的查詢重新排列excel格式的查詢結果

Select * from (
SELECT ID,src_id    
    FROM ckt_GRP 
     ) 
UNION ALL 
select ID,src_id from TEST_GRP 
) 
pivot(count(distinct id) for tbl in('IDl' IDl)) 
pivot(count(distinct src_id) for tb2 in('VOL' VOL)) 

回答

0

我不會進入細節爲您的查詢但是請檢查下面的邏輯來創建單獨的列,如果這是你想要的東西缺少右括號...

Select ID, Type, IDH, DMVOL from 
(Select ID, Type, count(distinct HORDER.H_ORDER_BK) IDH, 0 DMVOL from Table_A 
    Union All 
    Select ID, Type, 0 IDH, count(distinct ordmast_srcid) DMVOL from Table_B) 

PS:我無法打開圖像鏈接。

編輯:試試這個]

Select sys_db_name,entity_id,ORD_DEL_DT,SUM(IDH) IDH, Sum(DM_VOL) DM_VOL from (
SELECT 'IDH' tb1,LDELIVERYORDER.sys_db_name sys_db_name, 
      SORDERMAIN.ENTITY_ID ENTITY_ID, 
      TO_NUMBER (TO_CHAR (ORD_DEL_DT, 'YYYYMMDD')) ORD_DEL_DT, 
      count(distinct HORDER.H_ORDER_BK) IDH, 
      0 DM_VOL 
    FROM INT_CDW_DV.L_DELIVERY_ORDER LDELIVERYORDER 
      INNER JOIN 
      INT_CDW_DV.H_ORDER HORDER 
      ON  HORDER.H_ORDER_ID = LDELIVERYORDER.H_ORDER_ID 
       AND HORDER.SYS_DB_NAME = LDELIVERYORDER.SYS_DB_NAME 
       AND HORDER.SYS_DB_NAME in ('AS') 
      INNER JOIN 
      (SELECT S_ORDER_MAIN.ENTITY_ID, 
        S_ORDER_MAIN.H_ORDER_ID, 
        S_ORDER_MAIN.SYS_DB_NAME 
      FROM INT_CDW_DV.S_ORDER_MAIN 
        INNER JOIN 
        ( SELECT S_ORDER_MAIN.H_ORDER_ID, 
          S_ORDER_MAIN.SYS_DB_NAME, 
          MAX (S_ORDER_MAIN.SYS_VALID_FROM_DTS) 
           AS SYS_VALID_FROM_DTS 
         FROM INT_CDW_DV.S_ORDER_MAIN 
         WHERE S_ORDER_MAIN.SYS_DB_NAME in ('AS') 
        GROUP BY S_ORDER_MAIN.H_ORDER_ID, S_ORDER_MAIN.SYS_DB_NAME) b 
        ON  S_ORDER_MAIN.H_ORDER_ID = b.H_ORDER_ID 
         AND S_ORDER_MAIN.SYS_VALID_FROM_DTS = 
           b.SYS_VALID_FROM_DTS 
         AND S_ORDER_MAIN.SYS_DB_NAME = b.SYS_DB_NAME) SORDERMAIN 
      ON  HORDER.H_ORDER_ID = SORDERMAIN.H_ORDER_ID 
       AND HORDER.SYS_DB_NAME = SORDERMAIN.SYS_DB_NAME 
      INNER JOIN 
      (SELECT S_DELIVERY_MAIN.ORD_DEL_DT, 
        S_DELIVERY_MAIN.H_DELIV_ID, 
        S_DELIVERY_MAIN.SYS_DB_NAME 
      FROM INT_CDW_DV.S_DELIVERY_MAIN 
        INNER JOIN 
        ( SELECT S_DELIVERY_MAIN.H_DELIV_ID, 
          S_DELIVERY_MAIN.SYS_DB_NAME, 
          MAX (S_DELIVERY_MAIN.SYS_VALID_FROM_DTS) 
           AS SYS_VALID_FROM_DTS 
         FROM INT_CDW_DV.S_DELIVERY_MAIN 
         WHERE 
         S_DELIVERY_MAIN.SYS_DB_NAME in ('AS') 
        GROUP BY S_DELIVERY_MAIN.H_DELIV_ID, 
          S_DELIVERY_MAIN.SYS_DB_NAME) b 
        ON  S_DELIVERY_MAIN.H_DELIV_ID = b.H_DELIV_ID 
         AND S_DELIVERY_MAIN.SYS_VALID_FROM_DTS = 
           b.SYS_VALID_FROM_DTS 
         AND S_DELIVERY_MAIN.SYS_DB_NAME = b.SYS_DB_NAME) SDELIVERYMAIN 
      ON  LDELIVERYORDER.H_DELIV_ID = SDELIVERYMAIN.H_DELIV_ID 
       AND LDELIVERYORDER.SYS_DB_NAME = SDELIVERYMAIN.SYS_DB_NAME 
    WHERE ORD_DEL_DT between to_date ('20170717', 'YYYYMMDD') and to_date ('20170723', 'YYYYMMDD') 
    and LDELIVERYORDER.sys_db_name in ('AS') and SORDERMAIN.ENTITY_ID = 26 
      group by LDELIVERYORDER.sys_db_name, 
      SORDERMAIN.ENTITY_ID, 
      TO_NUMBER (TO_CHAR (ORD_DEL_DT, 'YYYYMMDD')) 
      order by LDELIVERYORDER.sys_db_name, 
      SORDERMAIN.ENTITY_ID, 
      TO_NUMBER (TO_CHAR (ORD_DEL_DT, 'YYYYMMDD')) 
UNION ALL 
select 'DMVOL' tb2,sys_db_name,entity_id,shipping_dayid ORD_DEL_DT, 0 IDH, count(distinct ordmast_srcid) DM_VOL 
from int_pub_edw.dm_valid_order_line 
where shipping_dayid between 20170717 and 20170723 
and sys_db_name = 'AS' 
and entity_id = 26 
and valid_order=1 
group by sys_db_name,entity_id,shipping_dayid 
) group by sys_db_name,entity_id,ORD_DEL_DT 
+0

我曾嘗試和更新了我的答案的問題,但我得到的錯誤在UNION缺少右paranthesis所有的線路也已經更新了我的答案,並添加透視條件的底部但不知道其是否正確 – Andrew

+0

@Andrew嘗試我編輯的答案。 – pOrinG

+0

它在UNION ALL中給出了與缺少括號相同的錯誤 – Andrew