簡體   English   中英

Teradata / 將記錄與 UNION 合並不起作用

[英]Teradata / Combine records with a UNION not working

我有一個關於 UNION 的查詢。 我試圖將 2 條記錄合並為 1 條記錄。上半部分從 1 組表中獲取記錄,下半部分從一組不同的表中獲取記錄。 兩半都使用來自 2 個派生查詢的字段。 目前的結果是這樣的:

 Group             Branch               Ref NUm            GL Amt           Bank Amt
   135                 15                    1z2x3c                25.00               0.00
   135                 15                    1z2x3c                  0.00              25.00

我想看到的是:

 135                15                    1z2x3c                   25.00             25.00

我在每一半中添加了 0.00 的字段,所以我有相同數量的列,因為兩半帶回了不同的數量字段。 我還比較了所有字段及其數據類型。 如果它們不同,那么我使用 CAST 使它們相同。 我可以用 UNION 來做到這一點,還是有其他方法可以將 2 行合並為 1 行? 我真的很感謝你的幫助。 謝謝.........

這是我開發的sql:

 with drvd_qry (operating_unit, grp_brn_id, ecr_dept_id, stn_id) as
 (select
 soh.operating_unit,
 s.grp_brn_id,
 s.ecr_dept_id,
 s.stn_id

from stns s
 inner join rfs.stn_ops_hierarchies soh on soh.stn_stn_id = s.stn_id
 where substr(s.grp_brn_id, 1, 2) = 'G1'
 group by soh.operating_unit, s.grp_brn_id, s.ecr_dept_id, s.stn_id),

qry_drvd (department, ecr_ticket_no, open_item_id, rnt_agr_nbr, monetary_amount) as

(select
 j.department,
 j.ecr_ticket_no,
 j.open_item_id,
 j.rnt_agr_nbr,
 cast(j.monetary_amount as decimal (15,2))

from
 rfs.journal_entries j

where
 j.business_unit = 'A0141'
 and j.accounting_date = cast ('23-SEP-2015' as date format 'dd-MMM-YYYY')
 and  j.account_gl = '109850')

select

bb.BU,
 bb.GPBR,
 bb.STN_ID,
 bb.DEPTID,
 cast(ft.mrchnt_nbr as decimal (20,0)) as MERCH_NUM,
 bb.TICKET_NUM,
 ft.prim_acct_frst_six_dgt_nbr as FIRST6,
 ft.prim_acct_last_four_dgt_nbr as LAST4,
 bb.AUTH_NUM,
 cast(ft.stlmt_uniq_ref_nbr as decimal (20,0)) as REF_NUM,
 bb.GL_AMT,
 bb.BANK_AMT

from

(select
 aa.bu,
 aa.gpbr,
 aa.stn_id,
 aa.deptid,
 aa.ticket_num,
 p.auth_nbr as AUTH_NUM,
 p.fin_tran_ref_id,
 aa.GL_AMT,
 CAST(0 AS DECIMAL (15,2)) as BANK_AMT

from

(select
 dq.operating_unit as BU,
 dq.grp_brn_id as GPBR,
 dq.stn_id as STN_ID,
 qd.department as DEPTID,
 qd.ecr_ticket_no as TICKET_NUM,
 qd.open_item_id,
 qd.rnt_agr_nbr,
 cast(qd.monetary_amount as decimal (15,2)) as GL_AMT

from
 qry_drvd qd,
 drvd_qry dq

where dq.ecr_dept_id = qd.department ) aa

left outer join rfs.pymts p on p.ecr_pymt_id = cast(aa.open_item_id as decimal(19,0))
 and p.ram_rea_rnt_agr_nbr = aa.rnt_agr_nbr) bb

left outer join paymt.fin_tran ft on ft.fin_tran_ref_id = bb.fin_tran_ref_id

UNION

select

b.BU,
 b.GPBR,
 b.STN_ID,
 b.DEPTID,
 cast(b.MERCH_NUM as decimal(20,0)),
 qd.ecr_ticket_no as TICKET_NUM,
 b.FIRST6,
 b.LAST4,
 b.AUTH_NUM,
 cast(b.REF_NUM as decimal(20,0)),
 b.GL_AMT,
 b.BANK_AMT

from

(select

a.BU,
 a.GPBR,
 a.STN_ID,
 a.DEPTID,
 a.MERCH_NUM,
 a.REF_NUM,
 a.FIRST6,
 a.LAST4,
 p.auth_nbr as AUTH_NUM,
 p.ecr_pymt_id,
 a.GL_AMT,
 a.BANK_AMT

from

(select
 dq.operating_unit as BU,
 dq.grp_brn_id as GPBR,
 dq.stn_id as STN_ID,
 dq.ecr_dept_id as DEPTID,
 cast(f.merch_num as varchar(20)) as MERCH_NUM,
 f.ret_ref_num as REF_NUM,
 ft.prim_acct_frst_six_dgt_nbr as FIRST6,
 ft.prim_acct_last_four_dgt_nbr as LAST4,
 CAST(0 AS DECIMAL(15,2)) as GL_AMT,

cast(case when f.tran_typ_cde = 1 then f.tran_amt
     when f.tran_typ_cde = 4 then f.tran_amt * -1
     end as decimal (15,2)) as BANK_AMT,

ft.fin_tran_ref_id

 from paymt.fndng_recncl_dtl_rprt f,
 rfs.cc_mrchnt_nbr m,
 drvd_qry dq,
 paymt.fin_tran ft
 --rfs.pymts p

where f.row_stat_cde = 'A'
 and cast (f.tran_proc_date as date format 'MM/DD/YYYY') = '09/23/2015'
 and m.mrchnt_nbr = f.merch_num
 and m.credit_card_typ = 'VI'
 and dq.stn_id = m.sta_stn_id
 and ft.stlmt_uniq_ref_nbr = f.ret_ref_num

 group by
 dq.operating_unit,
 dq.grp_brn_id,
 dq.stn_id,
 dq.ecr_dept_id ,
 f.merch_num,
 f.ret_ref_num,
 ft.prim_acct_frst_six_dgt_nbr,
 ft.prim_acct_last_four_dgt_nbr,
 GL_AMT,
 BANK_AMT,
 ft.fin_tran_ref_id) a

left outer join rfs.pymts p on p.fin_tran_ref_id = a.fin_tran_ref_id) b

left outer join qry_drvd qd on cast(qd.open_item_id as decimal(19,0)) = b.ecr_pymt_id

執行union然后使用group by並且因為你的虛擬字段是0使用SUM來連接兩行

  SELECT "Group", "Branch", "Ref Num", SUM("GL Amt"), SUM("Bank Amt")
  FROM ( 
       SELECT * FROM YourQuery1
       UNION ALL
       SELECT * FROM YourQuery2
      ) as t
  GROUP BY  
       "Group", "Branch", "Ref Num"

由於數據來自兩個不同的表,然后我相信在聯合上進行分組將無濟於事,因為不能在子查詢中使用使用 with 子句的派生表。如果可能,將此數據加載到易失性表中,然后進行分組並找到max of ("GL Amt"), ("Bank Amt") 和/或創建一個視圖,然后查詢...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM