求助!求助!在工作中遇到一个问题,请懂PGSQL的大神来帮忙解决一下

mm 迷情 2020-06-17 05:30:21

现在有一段sql,在mysql中运行正常,但现在要放在pgsql里面跑,有很多写法可能不一样,改了半天也没有运行出来,请懂pgsql的大神帮我改一下,看哪些写法是不支持在pgsql里的,以下是具体sql:
SELECT BASE.EBELN -- 1采购订单号 , BASE.EBELP -- 2采购订单行项目号 ,BASE.BUKRS -- 3公司代 , TOO1.BUTXT -- 4公司名称 , BASE.WERKS -- 5工厂 , TOO1W.NAME1 AS FACTORYNAME -- 6工厂名称 , BASE.MATNR -- 7物料编号 ,MAKT.MAKTX -- 8物料描述 , R057.ZZBJHBH -- 9招标计划编号,R057.ZXMLX -- 10项目类型,LEFT ( PROJ.PSPID, 12 ) AS PS_PSP_PNR -- 11项目编码, PROJ.POST1 -- 12项目描述,BASE.BANFN -- 13采购申请,BASE.BNFPO -- 14采购申请行项目,BASE.MENGE -- 15采购订单数量,BASE.MEINS -- 16计量单位,BASE.NETPR -- 17单价(不含税), CONCAT( FLOOR( T007V.KBETR / 1000 * 100 ), '%' ) AS t007v -- 18税率,ROUND( BASE.NETPR * ( 1 + T007V.KBETR / 1000 ), 2 ) AS netprprice -- 19单价(含税) ,BASE.NETWR -- 20总价(不含税),ROUND( BASE.NETWR * ( 1 + T007V.KBETR / 1000 ), 2 ) AS netwrprice -- 21总价(含税),ekko.LIFNR -- 22供应商编码,lfa1.NAME1 AS SUPPLIERNAME -- 23供应商名称,
IF( R057.DDSXRQ = '00000000', NULL, R057.DDSXRQ ) AS DDSXRQ -- 24采购订单生效日期,BASE.ZHTBH1 -- 25合同标识符,BASE.ZHTBH -- 26经法编号,
CASE WHEN BASE.KONNR = '' THEN '批次合同' ELSE '协议合同' END AS ZHTTYPE -- 27合同类型 ,
BASE.ZTERM -- ?28支付比例(单独关联字典数据获取) ,PO.NETWR AS zhtze -- ?29合同总额 ,
IF( R057.EINDT = '00000000', NULL, R057.EINDT ) AS EINDT -- 30合同计划交货日期 ,
CASE BASE.ELIKZ WHEN '' THEN '未完成' ELSE '已完成' END AS ELIKZ -- 31是否完成交货,EKET.WEMNG -- 32实际交货数量,
IF( EKBE.BUDAT = '00000000', NULL, EKBE.BUDAT ) AS BUDAT -- 33实际交货日期 ,
CASE WHEN RSEG.SHKZG_S > RSEG.SHKZG_H THEN '已交票' ELSE '未交票' END AS SHKZG -- 34是否交票 , CONCAT( LEFT ( EKBE.BUDAT, 6 ), '25' ) AS zzjgprq -- 35最佳截止挂票日期,
CASE WHEN RSEG.SHKZG_S > RSEG.SHKZG_H THEN '-' ELSE DATEDIFF( EKBE.BUDAT, NOW( ) ) END AS sfpyjts -- 36发票预警天数 ,
IF ( ( Y15X.ZFKSQ3 <> '' ), '是', '否' ) AS zfkxz -- 37到货款是否申请 1:是 0:否
-- ?38 到货款应申请金额(合同总额*支付比例中第2位,四舍五入保留两位小数),
IF( ( Y15X.ZFKSQ3 <> '' AND Y15X.ZDJZT3 = 'C' ), Y15X.ZSQFKJE3, '' ) AS zsqfkje -- 39到货款实际支付金额,
IF(( Y15X.ZFKSQ3 <> '' ), IF( Y15X.ZZFRQ3 = '00000000', NULL, Y15X.ZZFRQ3 ), '' ) AS zzfrq -- 40到货款实际支付日期,
IF( ( Y15X.ZFKSQ3 <> '' ), Y15X.ZDJZT3, '' ) AS zdjzt -- 41管控支付状态 ,
IF( ( Y15X.ZFKSQ3 <> '' ), IF ( Y15X.ZHXMZFJG3 = 'C', 1, 0 ), '' ) AS zhxmzfjg -- 42是否成功支付到货款 1:是 0:否,
IF( ( Y15X.ZFKSQ3 <> '' ),DATE_ADD( DATE_ADD( CONCAT( LEFT ( IF ( EKBE.BUDAT = '00000000', NULL, EKBE.BUDAT ), 6 ), '01' ),INTERVAL 1 MONTH ),INTERVAL - 1 DAY ),'' ) AS zzwzfrq -- 43最晚支付到货款日期,
IF(( Y15X.ZFKSQ3 <> '' ), IF(RSEG.SHKZG_S > RSEG.SHKZG_H,'-',DATEDIFF( CONCAT( LEFT ( EKBE.BUDAT, 6 ), '25' ), NOW( ) ) ), '' ) AS zdhyjts -- 44到货款预警天数 ,
IF( H035.KONNR IS NULL, '否', '是' ) zsfty -- 45是否投运 H035.TYD_ID -- 46投运单号,
IF( H035.ZZJRQ = '00000000', NULL, H035.ZZJRQ ) AS ZZJRQ_Y -- 47投运单创建日期,
IF( H035.ZTYRQ = '00000000', NULL, H035.ZTYRQ ) AS ZTYRQ_Y -- 48投运日期 , DATE_FORMAT( IF ( PROJ.ZSJTYSJ = '00000000', NULL, PROJ.ZSJTYSJ ), '%Y%m%d' ) AS ZSJTYSJ_Y -- 49项目投运日期 , DATE_FORMAT(IFNULL( IF( PROJ.ZSJTYSJ = '00000000', NULL, PROJ.ZSJTYSJ ),DATE_ADD( IF ( EKBE.BUDAT = '00000000', NULL, EKBE.BUDAT ), INTERVAL 10 MONTH ) ),'%Y%m%d' ) AS ZYTYRQ_Y -- 50应投运日期,IFNULL( DATEDIFF( IF ( PROJ.ZSJTYSJ = '00000000', NULL, PROJ.ZSJTYSJ ), NOW( ) ), DATEDIFF( DATE_ADD( IF ( EKBE.BUDAT = '00000000', NULL, EKBE.BUDAT ), INTERVAL 10 MONTH ), NOW( ) ) ) AS ZYYJTS_Y -- 51投运单预警天数,
IF( ( Y15X.ZFKSQ4 <> '' ), '是', '否' ) AS ZTYSFSQ_Y -- 52投运款是否申请 1:是 0:否
-- ?53到货款应申请金额(合同总额*支付比例中第3位,四舍五入保留两位小数) ,
IF( ( Y15X.ZFKSQ4 <> '' ), Y15X.ZSQFKJE4, '' ) AS ZSJFKJE_Y -- 54投运款实际支付金额,
IF( ( Y15X.ZFKSQ4 <> '' ), IF ( Y15X.ZHXMZFJG4 = 'C', 1, 0 ), '' ) AS ZTYKSFZF_Y -- 55投运款是否支付 1:是 0:否,
IF( ( Y15X.ZFKSQ4 <> '' ), Y15X.ZZFRQ4, '' ) AS ZZFRQ_Y -- 56投运款实际支付日期 ,
IF( ( Y15X.ZFKSQ4 <> '' ), Y15X.ZDJZT4, '' ) AS ZDJZT_Y -- 57管控支付状态 ,
IF( ( H043.KONNR IS NULL AND H043.KTPNR IS NULL ), '否', '是' ) ZSFZB_Y -- 58是否质保 ,
H043.ZZBDH AS ZZBDH_Y -- 59质保单号 ,
IF( H043.ZZJRQ = '00000000', NULL, H043.ZZJRQ ) AS ZZBJRQ_Y -- 60质保单创建日期 ,
IF( H043.ZZBRQ = '00000000', NULL, H043.ZZBRQ ) AS ZZBRQ_C -- 61质保日期 ,Z013.ZZBRQ AS ZZBRQ_B -- 62质保期,DATE_ADD( IF ( H035.ZTYRQ = '00000000', NULL, H035.ZTYRQ ), INTERVAL Z013.ZZBRQ MONTH ) AS ZZBRQ_Y -- 63应质保日期,DATEDIFF(DATE_ADD( IF ( H035.ZTYRQ = '00000000', NULL, H035.ZTYRQ ), INTERVAL Z013.ZZBRQ MONTH ),NOW( ) ) AS ZZBYJTS_Y -- 64质保单预警天数,
IF( ( Y15X.ZFKSQ5 <> '' ), '是', '否' ) AS ZZBSFSQ_Y -- 65质保款是否申请
-- ?66质保款应申请金额(合同总额*支付比例中第4位,四舍五入保留两位小数),
IF( ( Y15X.ZFKSQ5 <> '' ), Y15X.ZSQFKJE5, '' ) AS ZSJFKJE_B -- 67质保款实际支付金额 ,
IF( ( Y15X.ZFKSQ5 <> '' ), IF ( Y15X.ZHXMZFJG5 = 'C', 1, 0 ), '' ) AS ZZBSFZF_Y -- 68质保款是否支付 ,
IF(( Y15X.ZFKSQ5 <> '' ),IF( Y15X.ZZFRQ5 = '00000000', NULL, Y15X.ZZFRQ5 ),'' ) AS ZZBZFRQ_Y -- 69质保款实际支付日期 ,
IF( ( Y15X.ZFKSQ5 <> '' ), Y15X.ZDJZT5, '' ) AS ZDJZT_B -- 70管控支付状态
FROM (SELECT PO.EBELN,PO.EBELP,PO.BUKRS,PO.WERKS,PO.BANFN,PO.BNFPO,PO.MWSKZ,PO.MATNR,PO.MENGE,PO.MEINS,PO.NETPR,PO.NETWR,PO.ELIKZ,KO.ZHTBH1,KO.ZHTBH,KO.KONNR,KO.ZQGDH,KO.ZTERM FROM dwh_erp.ekpo PO INNER JOIN dwh_erp.ekko KO ON KO.EBELN = PO.EBELN AND KO.ZQGDH = '' AND KO.AEDAT > '20150101' WHERE ( PO.EBELN LIKE '45%' OR PO.EBELN LIKE '50%' )
AND PO.LOEKZ = ''
AND PO.MATKL not like 'G90%') BASE
LEFT JOIN dwh_erp.t001 TOO1 ON TOO1.BUKRS = BASE.BUKRS
AND TOO1.LAND1 = 'CN'
LEFT JOIN dwh_erp.t001w TOO1W ON TOO1W.WERKS = BASE.WERKS
LEFT JOIN dwh_erp.makt MAKT ON MAKT.MATNR = BASE.MATNR
AND MAKT.SPRAS = '1'
LEFT JOIN dwh_erp.zmmjyh_r057_his R057 ON R057.EBELN = BASE.EBELN
AND R057.EBELP = BASE.EBELP
LEFT JOIN ( SELECT ZEBKN, PS_PSP_PNR, BANFN, BNFPO FROM dwh_erp.ebkn WHERE ZEBKN = '01' ) EBKN ON EBKN.BANFN = BASE.BANFN
AND EBKN.BNFPO = BASE.BNFPO
LEFT JOIN dwh_erp.prps PRPS ON EBKN.PS_PSP_PNR = PRPS.PSPNR
LEFT JOIN dwh_erp.proj PROJ ON PRPS.PSPHI = PROJ.PSPNR
LEFT JOIN ( SELECT MWSKZ, MAX( KBETR ) AS KBETR FROM dwh_erp.t007v WHERE ALAND = 'CN' GROUP BY MWSKZ ) T007V ON T007V.MWSKZ = BASE.MWSKZ -- INNER JOIN (
-- SELECT BANFN,SUM(ZHSZJ) AS ZHSZJ FROM dwh_erp.ztmmjyt_013 GROUP BY BANFN
-- ) T013 ON T013.BANFN = BASE.BANFN
LEFT JOIN (
SELECT T.EBELN,SUM( ROUND( T.NETWR * ( 1 + T7.KBETR / 1000 ), 2 ) ) AS NETWR FROM
(SELECT PO.EBELN,PO.EBELP,PO.BUKRS,PO.WERKS,PO.BANFN,PO.BNFPO,PO.MWSKZ,PO.MATNR,PO.MENGE,PO.MEINS,
PO.NETPR,PO.NETWR,PO.ELIKZ,KO.ZHTBH1,KO.ZHTBH,KO.KONNR,KO.ZQGDH,KO.ZTERM
FROM dwh_erp.ekpo PO INNER JOIN dwh_erp.ekko KO ON KO.EBELN = PO.EBELN AND KO.ZQGDH = '' AND KO.AEDAT > '20150101'
WHERE ( PO.EBELN LIKE '45%' OR PO.EBELN LIKE '50%' ) AND PO.LOEKZ = '' AND PO.MATKL not like 'G90%') T LEFT JOIN ( SELECT MWSKZ, MAX( KBETR ) AS KBETR FROM dwh_erp.t007v WHERE ALAND = 'CN' GROUP BY MWSKZ ) T7 ON T7.MWSKZ = T.MWSKZ GROUP BY T.EBELN ) PO ON PO.EBELN = BASE.EBELN LEFT JOIN dwh_erp.eket EKET ON EKET.EBELN = BASE.EBELN AND EKET.EBELP = BASE.EBELP LEFT JOIN ( SELECT EBELN, EBELP, MAX( BUDAT ) AS BUDAT FROM dwh_erp.ekbe GROUP BY EBELN, EBELP ) EKBE ON EKBE.EBELN = BASE.EBELN AND EKBE.EBELP = BASE.EBELP LEFT JOIN (
SELECT EBELN,EBELP,COUNT( SHKZG ) SHKZG, COUNT( SHKZG = 'S' OR NULL ) SHKZG_S,COUNT( SHKZG = 'H' OR NULL ) SHKZG_H FROM dwh_erp.rseg GROUP BY EBELN,EBELP ) RSEG ON RSEG.EBELN = BASE.EBELN AND RSEG.EBELP = BASE.EBELP LEFT JOIN (SELECTT153.EBELN,T153.EBELP,MAX( T152.ZHTLX ) AS ZHTLX,MAX( T152.ZYWLX ) AS ZYWLX,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T152.ZFKSQ ELSE NULL END ) AS ZFKSQ3,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T152.ZFKXZ ELSE NULL END ) AS ZFKXZ3,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T153.ZSQFKJE ELSE NULL END ) AS ZSQFKJE3,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T152.ZBCSQJE END ) AS ZBCSQJE3,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T152.ZZFRQ ELSE NULL END ) AS ZZFRQ3,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T152.ZDJZT ELSE NULL END ) AS ZDJZT3,MAX( CASE WHEN T152.ZFKXZ = 'M3' THEN T153.ZHXMZFJG ELSE NULL END ) AS ZHXMZFJG3,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T152.ZFKSQ ELSE NULL END ) AS ZFKSQ4,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T152.ZFKXZ ELSE NULL END ) AS ZFKXZ4,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T153.ZSQFKJE ELSE NULL END ) AS ZSQFKJE4,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T152.ZBCSQJE END ) AS ZBCSQJE4,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T152.ZZFRQ ELSE NULL END ) AS ZZFRQ4,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T152.ZDJZT ELSE NULL END ) AS ZDJZT4,MAX( CASE WHEN T152.ZFKXZ = 'M4' THEN T153.ZHXMZFJG ELSE NULL END ) AS ZHXMZFJG4,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T152.ZFKSQ ELSE NULL END ) AS ZFKSQ5,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T152.ZFKXZ ELSE NULL END ) AS ZFKXZ5,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T153.ZSQFKJE ELSE NULL END ) AS ZSQFKJE5,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T152.ZBCSQJE ELSE NULL END ) AS ZBCSQJE5,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T152.ZZFRQ ELSE NULL END ) AS ZZFRQ5,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T152.ZDJZT ELSE NULL END ) AS ZDJZT5,MAX( CASE WHEN T152.ZFKXZ = 'M5' THEN T153.ZHXMZFJG ELSE NULL END ) AS ZHXMZFJG5 FROM dwh_erp.zmm00t_y_153 T153 INNER JOIN dwh_erp.zmm00t_y_152 T152 ON T152.ZFKSQ = T153.ZFKSQ INNER JOIN ( SELECT T153.EBELN,T153.EBELP,MAX( T153.ZFKSQ ) AS ZFKSQ, T152.ZFKXZ FROM dwh_erp.zmm00t_y_153 T153
INNER JOIN dwh_erp.zmm00t_y_152 T152 ON T152.ZFKSQ = T153.ZFKSQ AND T152.ZDJZT IN ( '1', '2', '4', 'C' ) GROUP BY T153.EBELN,T153.EBELP,T152.ZFKXZ ) T ON T.EBELN = T153.EBELN AND T.EBELP = T153.EBELP AND T.ZFKSQ = T153.ZFKSQ GROUP BY T153.EBELN,T153.EBELP ) Y15X ON Y15X.EBELN = BASE.EBELN AND Y15X.EBELP = BASE.EBELP LEFT JOIN dwh_erp.zmmjyh_htly_035 H035 ON H035.KONNR = BASE.EBELN AND H035.KTPNR = BASE.EBELP LEFT JOIN dwh_erp.zmmjyh_htly_043 H043 ON H043.KONNR = BASE.EBELN AND H043.KTPNR = BASE.EBELP LEFT JOIN dwh_erp.ztmmjyt_013 Z013 ON Z013.BANFN = BASE.BANFN AND Z013.BNFPO = BASE.BNFPO LEFT JOIN dwh_erp.ekko ekko ON ekko.EBELN = BASE.EBELN LEFT JOIN ( SELECT LIFNR, NAME1 FROM dwh_erp.lfa1 WHERE LAND1 = 'CN' ) lfa1 ON ekko.LIFNR = lfa1.LIFNR WHERE 1 =1
...全文
164 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
trainee 2020-06-20
  • 打赏
  • 举报
回复
postgresql 没有IF和 concat函数 代替的是 case when .... end 和 || 语句
mm 迷情 2020-06-17
  • 打赏
  • 举报
回复
求大神帮助,在线等啊

956

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧