現在有一段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
uj5u.com熱心網友回復:
求大神幫助,在線等啊uj5u.com熱心網友回復:
postgresql 沒有IF和 concat函式代替的是 case when .... end 和 || 陳述句
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/15017.html
標籤:PostgreSQL
上一篇:達夢資料庫安裝步驟
下一篇:MySQL慢的優化方法
