Case语句复制行-Teradata

时间:2018-07-20 16:43:56

标签: case teradata

我有以下查询,问题出在Case语句中。它在Join条件下使用。由于某种原因,从案子中提出了两种选择

代码在这里

SELECT C.GREGORIAN_MONTH_ID
,C.BUSINESS_PARTY_ID
,C.TOTAL_MONTO
,C.Capitas_Puntuales
,C.CUIT
,nb_apellido
,nb_oficial_actual
,nb_cne_obe
,nb_nodo
,nb_territorio
,cd_area_negocio

FROM (SELECT gregorian_month_id
                ,business_party_id
                ,Case when BUSINESS_PARTY_ID in (88888,200) then '9999999999999' else business_party_ident_num end CUIT
                ,SUM(amt_accum) Total_Monto
                ,count(*) Capitas_Puntuales

                FROM  dbsreg.A127932_PARTY_MAIN_PAYROLL_HISTORY
                where gregorian_month_id= 201806
                group by 1,2,3
                ) C 

LEFT JOIN 
    (select NU_CUIT, nb_apellido,nb_oficial_actual, nb_cne_obe, nb_nodo, nb_territorio,cd_area_negocio
    ,(fh_corte/100 + 190000) gregorian_month_id
    from dbsreg.a119527_base_info_gerencial 
    ) G

on C.CUIT = G.NU_CUIT 
and  (case 
         when C.gregorian_month_id  in (G.gregorian_month_id) then C.gregorian_month_id 
         else C.gregorian_month_id -1
        END) = G.gregorian_month_id  
ORDER BY C.BUSINESS_PARTY_ID

任何人都可以告诉发生了什么事吗?

2 个答案:

答案 0 :(得分:0)

您的最终查询返回的C.BUSINESS_PARTY_ID不会由Case转换。您的案例陈述还利用BUSINESS_PARTY_ID。您是不是要在外部选择语句中使用C.CUIT而不是C.BUSINESS_PARTY_ID?

答案 1 :(得分:0)

长话短说,我将案件从表C移至where语句,并为格里高利度添加了用户定义的值:

SELECT C.GREGORIAN_MONTH_ID
,C.BUSINESS_PARTY_ID
,C.TOTAL_MONTO
,C.Capitas_Puntuales
,C.CUIT
,nb_apellido
,nb_oficial_actual
,nb_cne_obe
,nb_nodo
,nb_territorio
,cd_area_negocio

FROM (SELECT gregorian_month_id
                ,business_party_id
                ,Case when BUSINESS_PARTY_ID in (88888,200) then '9999999999999' else business_party_ident_num end CUIT
                ,SUM(amt_accum) Total_Monto
                ,count(*) Capitas_Puntuales

                FROM  dbsreg.A127932_PARTY_MAIN_PAYROLL_HISTORY
                where gregorian_month_id= ?FECHA_BASE
                group by 1,2,3
                ) C 

LEFT JOIN 
    (select NU_CUIT, nb_apellido,nb_oficial_actual, nb_cne_obe, nb_nodo, nb_territorio,cd_area_negocio
    ,(fh_corte/100 + 190000) gregorian_month_id
    from dbsreg.a119527_base_info_gerencial 
    where gregorian_month_id = (Case when ?FECHA_BASE = (gregorian_month_id) then gregorian_month_id else gregorian_month_id-1 end ) 
    ) G

on C.CUIT = G.NU_CUIT 
ORDER BY C.BUSINESS_PARTY_ID