I moved the function to Postgres. In MS SQL, it was executed in less than a second. In Postgresql, it runs for almost 6 minutes. I've been working on this problem for 6 hours, and I haven't found a reason. As I understand it, the problem is in the syntax.
In the xt_ed_registr_grp_led function, I attach the function (xt_ef_registr_pts_all) to a table in this format:
LEFT JOIN dbo.xt_ef_registr_pts_all(_D_Date, -1, NULL) AS RP_Child
ON RP_Child.link = RG.f_registr_pts
Next, I attach the code from MS SQL and Postgres.
Postgres function
...
AS
$$
BEGIN
RETURN QUERY SELECT
RP.link,
RP.f_division,
RP.f_subdivision,
RP.f_subscr,
RP.f_sale_items,
RP.f_sale_category,
RP.d_date_begin,
RP.d_date_end,
RCap.f_work_modes AS F_Work_Modes,
RP.f_energy_levels,
NP.f_conn_points,
NP.c_address_short,
CASE
WHEN COALESCE(Provinces.c_name, '') = ''
THEN NULL
ELSE LTRIM(RTRIM((COALESCE(LT_Provinces.c_prefix || ' ', '') || COALESCE(Provinces.c_name, ''))))
END AS C_Provinces,
CASE
WHEN COALESCE(Towns.c_name, '') = ''
THEN NULL
ELSE LTRIM(RTRIM((COALESCE(LT_Towns.c_prefix || ' ', '') || COALESCE(Towns.c_name, ''))))
END AS C_Towns,
CASE
WHEN COALESCE(Municipalities.c_name, '') = ''
THEN NULL
ELSE LTRIM(RTRIM((COALESCE(LT_Municipalities.c_prefix || ' ', '') || COALESCE(Municipalities.c_name, ''))))
END AS C_Municipalities,
CASE
WHEN LTRIM(RTRIM(((COALESCE(LT_Streets.c_prefix || ' ', '') || COALESCE(Streets.c_name, '')) || COALESCE(', ' || CP.c_building_num, '') ||
COALESCE(COALESCE(' ' || sbct.c_short_name, ' ' || sbct.c_name, '/') || CP.c_building_corp, '')))) = ''
THEN NULL
ELSE LTRIM(RTRIM(((COALESCE(LT_Streets.c_prefix || ' ', '') || COALESCE(Streets.c_name, '')) || COALESCE(', ' || CP.c_building_num, '') ||
COALESCE(COALESCE(' ' || sbct.c_short_name, ' ' || sbct.c_name, '/') || CP.c_building_corp, ''))))
END AS C_Street_Building,
RCM.f_calc_methods,
RCM.d_date AS D_Calc_Methods_Date,
CASE
WHEN EXISTS(SELECT
0
FROM dbo.ed_registr_grp RG1
WHERE RG1.f_registr_pts_main = RP.link
)
THEN TRUE
ELSE FALSE
END AS B_Group,
CASE
WHEN EXISTS(SELECT
0
FROM dbo.ed_registr_grp RG1
WHERE RG1.f_registr_pts = RP.link
)
THEN TRUE
ELSE FALSE
END AS B_IncludeGroup,
dbo.xt_ef_registr_pts_energy_categ(RP.f_sale_items, RP.f_tariff, RP.f_energy_levels) AS F_Energy_Category,
RP.f_registr_pts_prev,
D.link AS F_Device,
EDP.f_division AS f_device_division,
D.n_rate,
D.n_rate * dbo.ui_ef_device_transf_rate(D.f_division, D.link, COALESCE(_D_Date, NOW())) AS N_Ktf,
Dig.c_digits,
EDC.c_name AS C_Device_Category_Name,
EDC.f_class,
D.f_device_types,
D.c_serial_number,
EDP.f_energy_types,
EDP.n_percent2,
EDP.b_main AS B_Device_Main,
D.d_setup_date,
D.d_replace_date,
EDP.n_percent,
RPT.f_tariff,
RPT.d_date::timestamptz(0)::text AS D_Tariff_Date,
RPT.f_norms,
RCon.n_cons AS N_Cons_Cons,
RCon.n_cons2 AS N_Cons_Cons2,
RCon.d_date AS D_Cons_Date,
RCap.n_cap AS N_Cap_Cons,
RCap.n_cap2 AS N_Cap_Cons2,
RCap.n_cap3 AS N_Cap_Cons3,
RCap.d_date AS D_Cap_Date,
RPA.n_rate AS N_Activity_Rate,
RPA.d_date AS D_Activity_Date,
RP.c_code AS n_code,
RP.c_name,
RP.f_balance_types,
RP.f_balance_type_details,
RP.f_balance_types_sec,
RP.f_balance_type_details_sec,
RP.n_order,
RP.b_non_heat_formula,
RP.b_line_formula,
RP.b_transf_formula,
RP.f_transf_types,
SDA.link AS F_Areas,
erpa.d_date AS D_Areas_Date,
RP.b_notinclude,
RP.f_form_46,
RP.f_cons_category,
RP.s_owner,
RP.s_create_date,
RP.s_modif_date,
RP.s_creator,
NP.link AS F_Network_Pts,
NP.c_code AS C_Network_Pts_Code,
NR.c_network_path AS _Bound_F_Network_Pts,
NR.c_network_path_short AS C_Network_Path_Short,
CASE
WHEN NIP.f_parent IS NOT NULL
THEN dbo.cf_get_network_name(COALESCE(NI_P.f_networks, NI.f_networks))
END AS _Bound_F_Network,
FSI.c_name AS _Bound_F_Sale_Items,
EDT.c_name || COALESCE(' / ' || EDT.c_modification, '') AS _Bound_F_Device_Types,
(dbo.cf_get_c_codename(FT.n_code, FT.c_name) || ' / ' || CAST(COALESCE(FTH.n_tariff, '0') AS text) || 'р.') AS _Bound_F_Tariff,
FTH.n_tariff AS N_Tariff1,
FTH.n_tariff_2 AS N_Tariff2,
EEL.c_name AS _Bound_F_Energy_Levels,
ECM.c_name || COALESCE(' / ' || ECM2.c_name, '') AS _Bound_F_Calc_Methods,
COALESCE(EBT.c_short_name, EBT.c_name) AS _Bound_F_Balance_Types,
COALESCE(EET.c_short_name, EET.c_name) AS _Bound_F_Energy_Types,
ESWM.c_name AS _Bound_F_Work_Modes,
ELA.c_name AS _Bound_F_Transf_Algorithms,
ELA2.c_name AS _Bound_F_Line_Algorithms,
ELA3.c_name AS _Bound_F_Non_Heat_Algorithms,
SDA.c_name AS _Bound_F_Areas,
CP.c_code_cp AS N_Conn_Points_Code,
COALESCE(CP.c_name, NP.c_address_short) AS C_Conn_Points_Name,
COALESCE(CPS.c_name, '') || COALESCE(' ' || CT.c_name_short, '') || COALESCE(' № ' || CPS.c_premise_number, '') AS C_Conn_Points_Sub_Name,
CPS.c_premise_number AS C_Premise_Number,
COALESCE((CPS.j_custom ->> 'j_b_dryers')::bool, (CP.j_custom ->> 'j_b_dryers')::bool) AS B_Polotenchik,
COALESCE((CPS.j_custom ->> 'j_b_riser_insulation')::bool, (CP.j_custom ->> 'j_b_riser_insulation')::bool) AS B_Isolation,
COALESCE((CPS.j_custom ->> 'j_b_external_gvs')::bool, (CP.j_custom ->> 'j_b_external_gvs')::bool) AS B_OuterGVS,
CP.f_conn_types AS F_Conn_Types,
CP.f_conn_status_types AS F_Conn_Status_Types,
FSC.c_name AS _Bound_F_Sale_Category,
ETT.c_name AS _Bound_F_Transf_Types,
FN.c_name AS _Bound_F_Norms,
dbo.cf_get_network_name(COALESCE(NI_P.f_networks, NI.f_networks)) AS C_Network_Path,
RP.n_graph_form,
RP.n_line_loss,
RP.n_rp_loss,
NP.f_conn_points_sub,
RPL_Non_Heat.d_date_begin AS D_Non_Heat_Date,
RPL_Non_Heat.n_value AS N_Non_Heat_Waste,
RPL_Non_Heat.f_loss_algorithms AS F_Non_Heat_Algorithms,
RPL_Line.d_date_begin AS D_Line_Date,
RPL_Line.n_value AS N_Line_Waste,
RPL_Line.f_loss_algorithms AS F_Line_Algorithms,
RPL_Transf.d_date_begin AS D_Transf_Date,
RPL_Transf.n_value AS N_Transf_Waste,
RPL_Transf.f_loss_algorithms AS F_Transf_Algorithms,
s.n_code AS N_Code_Subscr,
p.c_name1 AS C_Name_Subscr
FROM dbo.ed_registr_pts AS RP
LEFT JOIN dbo.sd_subscr AS s
ON s.link = RP.f_subscr
LEFT JOIN dbo.cd_partners AS p
ON p.link = s.f_partners
LEFT JOIN dbo.ed_network_pts AS NP
ON NP.link = RP.f_network_pts
AND NP.b_pod = TRUE
LEFT JOIN LATERAL
( SELECT
NIPX.link,
NIPX.f_parent
FROM dbo.ed_network_struct NIPX
WHERE NIPX.f_child = NP.link
AND NIPX.b_pod = TRUE
AND NIPX.b_ismain = TRUE
AND NIPX.d_date_begin <= COALESCE(_D_Date, NOW())
ORDER BY
NIPX.d_date_begin DESC
LIMIT 1
) AS NIP
ON TRUE
LEFT JOIN LATERAL
(
SELECT
NIPX.link,
NIPX.f_parent
FROM dbo.ed_network_struct NIPX
WHERE NIPX.f_child = NP.f_network_pts
AND NIPX.b_pod = TRUE
AND NIPX.b_ismain = TRUE
AND NIPX.d_date_begin <= COALESCE(_D_Date, NOW())
ORDER BY
NIPX.d_date_begin DESC
LIMIT 1
) AS NIP_P
ON TRUE
LEFT JOIN LATERAL
(
SELECT
NRi.id,
NRi.c_network_path,
NRi.c_network_path_short
FROM dbo.ed_network_routes NRi
WHERE NRi.n_level = 0
AND NRi.link = COALESCE(NIP_P.f_parent, NIP.f_parent)
AND NOW() >= NRi.d_date0
AND NOW() < NRi.d_date1
ORDER BY
NRi.n_rate,
NRi.d_date1,
NRi.b_main DESC
LIMIT 1
) AS NR
ON TRUE
LEFT JOIN dbo.ed_network_pts NI
ON NI.link = NIP.f_parent
AND NI.b_pod = FALSE
LEFT JOIN dbo.ed_network_pts NI_P
ON NI_P.link = NIP_P.f_parent
AND NI_P.b_pod = FALSE
/* Объект и адрес */
LEFT JOIN dbo.sd_conn_points CP
ON CP.link = NP.f_conn_points
LEFT JOIN dbo.sd_conn_points_sub CPS
ON CPS.link = NP.f_conn_points_sub
LEFT JOIN dbo.cs_conn_types CT
ON CT.link = CPS.f_conn_types
LEFT JOIN dbo.ss_building_corp_type sbct
ON sbct.link = CP.f_building_corp_type
LEFT JOIN dbo.ss_locations AS Provinces
ON Provinces.link = CP.f_provinces_fias
LEFT JOIN dbo.ss_location_types AS LT_Provinces
ON LT_Provinces.link = Provinces.f_location_types
LEFT JOIN dbo.ss_locations AS Towns
ON Towns.link = CP.f_towns_fias
LEFT JOIN dbo.ss_location_types AS LT_Towns
ON LT_Towns.link = Towns.f_location_types
LEFT JOIN dbo.ss_locations AS Municipalities
ON Municipalities.link = CP.f_municipalities_fias
LEFT JOIN dbo.ss_location_types AS LT_Municipalities
ON LT_Municipalities.link = Municipalities.f_location_types
LEFT JOIN dbo.ss_locations AS Streets
ON Streets.link = CP.f_streets_fias
LEFT JOIN dbo.ss_location_types AS LT_Streets
ON LT_Streets.link = Streets.f_location_types /* Параметры ТУ */
LEFT JOIN dbo.ed_registr_pts_areas AS erpa
ON erpa.f_registr_pts = RP.link
AND erpa.d_date <= COALESCE(_D_Date, NOW())
AND erpa.d_date_end > COALESCE(_D_Date, NOW())
LEFT JOIN dbo.sd_areas AS SDA
ON SDA.link = erpa.f_areas
LEFT JOIN dbo.ed_registr_pts_loss AS RPL_Line
ON RPL_Line.f_registr_pts = RP.link
AND RPL_Line.f_loss_types = 1
AND COALESCE(_D_Date, NOW()) BETWEEN RPL_Line.d_date_begin AND RPL_Line.d_date_end
LEFT JOIN dbo.ed_registr_pts_loss AS RPL_Transf
ON RPL_Transf.f_registr_pts = RP.link
AND RPL_Transf.f_loss_types = 2
AND COALESCE(_D_Date, NOW()) BETWEEN RPL_Transf.d_date_begin AND RPL_Transf.d_date_end
LEFT JOIN dbo.ed_registr_pts_loss AS RPL_Non_Heat
ON RPL_Non_Heat.f_registr_pts = RP.link
AND RPL_Non_Heat.f_loss_types = 3
AND COALESCE(_D_Date, NOW()) BETWEEN RPL_Non_Heat.d_date_begin AND RPL_Non_Heat.d_date_end
LEFT JOIN LATERAL
(
SELECT
RPA1.n_rate,
RPA1.d_date,
RPA1.f_registr_pts
FROM dbo.ed_registr_pts_activity AS RPA1
WHERE RPA1.f_registr_pts = RP.link
AND RPA1.d_date <= COALESCE(_D_Date, NOW())
ORDER BY
d_date DESC
LIMIT 1
) AS RPA
ON TRUE
LEFT JOIN dbo.ed_registr_pts_tariff AS RPT
ON RPT.f_registr_pts = RP.link
AND COALESCE(_D_Date, NOW()) BETWEEN RPT.d_date AND RPT.d_date_end
LEFT JOIN dbo.fs_tariff AS FT
ON FT.link = RPT.f_tariff
LEFT JOIN LATERAL
(
SELECT
FTH.n_tariff,
FTH.n_tariff_2
FROM dbo.fs_tariff_history FTH
WHERE FTH.f_tariff = FT.link
AND FTH.b_default = TRUE
AND COALESCE(_D_Date, NOW()) BETWEEN FTH.d_date_begin AND FTH.d_date_end
ORDER BY
FTH.link
LIMIT 1
) AS FTH
ON TRUE
LEFT JOIN dbo.ed_registr_pts_cap AS RCap
ON RCap.f_registr_pts = RP.link
AND RCap.b_contract = FALSE
AND COALESCE(_D_Date, NOW()) BETWEEN RCap.d_date AND RCap.d_date_end
LEFT JOIN LATERAL
(
SELECT
RCon_.n_cons,
RCon_.n_cons2,
RCon_.d_date
FROM dbo.ed_registr_pts_cons AS RCon_
WHERE RP.link = RCon_.f_registr_pts
AND RCon_.b_contract = FALSE
AND COALESCE(_D_Date, NOW()) BETWEEN RCon_.d_date AND RCon_.d_date_end
ORDER BY
RCon_.d_date
LIMIT 1
) AS RCon
ON TRUE
LEFT JOIN dbo.ed_registr_pts_calc_methods AS RCM
ON RCM.f_registr_pts = RP.link
AND COALESCE(_D_Date, NOW()) BETWEEN RCM.d_date AND RCM.d_date_end
LEFT JOIN dbo.es_calc_methods AS ECM
ON ECM.link = RCM.f_calc_methods
LEFT JOIN dbo.es_calc_methods AS ECM2
ON ECM2.link = RCM.f_calc_methods_default
LEFT JOIN LATERAL
(
SELECT
EDP1.link,
EDP1.f_devices,
EDP1.f_energy_types,
EDP1.n_percent,
EDP1.n_percent2,
EDP1.b_main,
EDP1.f_division
FROM dbo.ed_devices_pts EDP1
INNER JOIN dbo.ed_devices D1
ON D1.link = EDP1.f_devices
AND D1.d_setup_date <= COALESCE(_D_Date, NOW())
WHERE EDP1.f_registr_pts = RP.link
ORDER BY
D1.d_setup_date DESC
LIMIT 1
) AS EDP
ON TRUE
LEFT JOIN dbo.ed_devices D
ON D.link = EDP.f_devices
LEFT JOIN dbo.es_device_types EDT
ON EDT.link = D.f_device_types
LEFT JOIN dbo.es_device_categories EDC
ON EDC.link = EDT.f_device_categories
LEFT JOIN LATERAL dbo.ef_device_digits_list(D.link) AS Dig
ON TRUE
LEFT JOIN dbo.fs_sale_items AS FSI
ON FSI.link = RP.f_sale_items
LEFT JOIN dbo.fs_sale_categories AS FSC
ON FSC.link = RP.f_sale_category
LEFT JOIN dbo.es_energy_levels AS EEL
ON EEL.link = RP.f_energy_levels
LEFT JOIN dbo.es_balance_types AS EBT
ON EBT.link = RP.f_balance_types
LEFT JOIN dbo.es_loss_algorithms AS ELA
ON ELA.link = RP.f_transf_algorithms
LEFT JOIN dbo.es_loss_algorithms AS ELA2
ON ELA2.link = RP.f_line_algorithms
LEFT JOIN dbo.es_loss_algorithms AS ELA3
ON ELA3.link = RP.f_non_heat_algorithms
LEFT JOIN dbo.fs_norms FN
ON FN.link = RPT.f_norms
LEFT JOIN dbo.es_transf_types AS ETT
ON ETT.link = RP.f_transf_types
LEFT JOIN dbo.es_work_modes AS ESWM
ON ESWM.link = RCap.f_work_modes
LEFT JOIN dbo.es_energy_types AS EET
ON EET.link = EDP.f_energy_types
WHERE RP.d_date_begin <= COALESCE(_D_Date, NOW())
AND RP.f_division = COALESCE(_F_Division, RP.f_division)
AND (
_F_Areas = -1
OR _F_Areas = erpa.f_areas
OR (
_F_Areas IS NULL
AND erpa.f_areas IS NULL
)
OR (
_F_Areas IS NULL
AND erpa.f_areas = 0
)
);
END;
$$;
Initially, I thought the problem was in the tables used, because the structure has changed, but I checked the function with the replacement with the necessary ones, nothing has changed. So I think the problem is not in the tables.
My first select statements is:
SELECT cRefNum, cName, cProgram || '-' || cCode || '-' || cSection as CourseDesc, cTimeStart, cTimeEnd, cDay, ct.cCampus, cBuildingSection || cRoom AS Room, cSchedType
from coursedetails cd inner join coursetimes ct
using (cRefNum)
where cRefNum = 3816;
Which results in:
My second select statements is:
select cRefNum, LISTAGG(fname|| ' ' || lname, ', ') within group (order by cRefNum) as Teachers
from teachers
where cRefNum = 3816
group by cRefNum;
Which results in:
What I'm trying to achieve is:
select a.cRefNum, cName, CourseDesc, cTimeStart, cTimeEnd, cDay, Campus, Room, cSchedType, Teachers
from
(select cRefNum, cName, cProgram || '-' || cCode || '-' || cSection as CourseDesc, cTimeStart, cTimeEnd, cDay, ct.cCampus as Campus, cBuildingSection || cRoom AS Room, cSchedType from coursedetails cd inner join coursetimes ct using (cRefNum) where cRefNum = 3816) a,
(select cRefNum, LISTAGG(fname|| ' ' || lname, ', ') within group (order by cRefNum) as Teachers from teachers where cRefNum = 3816 group by cRefNum) b
where a.cRefNum = b.cRefNum;
This fixes it, but is really long and I don't know enough to shorten it.
Using ODBC connection to a DB2 instance with the select statement below it returns the following error:
Error Code: -122 SQL State: 42803
Can someone help me identify which part of the code below is raising the error
SELECT
SAB089.ZCREPRE0.CREPREDOS as ContractCode,
SAB089.ZCLIENA0.CLIENACLI as ConsentCode,
SAB089.ZCREPRE0.CREPREAGE as Branch,
(case
when SAB089.ZCREPRE0.CREPRECTA='7' then 'Open'
when SAB089.ZCREPRE0.CREPRECTA='8' then 'Closed'
end) as PhaseOfContract,
(case
when SAB089.ZCREPRE0.CREPRECTA='6' then 'GrantedButNotActivated'
when SAB089.ZCREPRE0.CREPRECTA='7' then 'GrantedAndActivated'
when SAB089.ZCREPRE0.CREPRECTA='8' then 'SettledOnTime'
end) as ContractStatus,
'Installment' as TypeOfContract,
(case
when SAB089.ZCREPRE0.CREPRENAT = '757' then 'Vehicule'
when SAB089.ZCREPRE0.CREPRENAT = '756' then 'Equipement'
when SAB089.ZCREPRE0.CREPRENAT = '758' then 'Immobilier'
end) as PurposeOfFinancing,
SAB089.ZCREDOS0.CREDOSDEV as CurrencyOfContract,
Cast(SAB089.ZCREDOS0.CREDOSMNT as DECIMAL(19,2)) as TotalAmount,
SAB089.ZCREAVI0.CREAVIMON as InstallmentAmount,
SAB089.ZCREPLA0.CREPLANPC as NumberOfInstallments,
Cast(SAB089.ZCREPRE0.CREPRECAP as DECIMAL(19,2)) as OutstandingAmount,
Cast(SAB089.ZIMPECH0.IMPECHMON as DECIMAL(19,2)) as PastDueAmount,
SAB089.ZIMPECH0.IMPECHDTI as PastDueDays,
SAB089.ZIMPDOS0.IMPDOSECH as NumberOfDueInstallments,
Cast(SUM(SAB089.ZCREAVI0.CREAVIMON + SAB089.ZCREAVI0.CREAVIMIN + SAB089.ZCREAVI0.CREAVITVA + SAB089.ZCREAVI0.CREAVIAM1)as DECIMAL(19,2)) as TotalMonthlyPayment,
(case
when SAB089.ZCREPLA0.CREPLAPCA = 'U' then 'FinalDay'
when SAB089.ZCREPLA0.CREPLAPCA = 'M' then 'Days30'
when SAB089.ZCREPLA0.CREPLAPCA = 'T' then 'Days90'
when SAB089.ZCREPLA0.CREPLAPCA = 'S' then 'Days120'
when SAB089.ZCREPLA0.CREPLAPCA = 'A' then 'Days360'
end)
as PaymentPeriodicity,
{fn substring(SAB089.ZCREMAD0.CREMADDMD,5,2)} || '-' || {fn substring(SAB089.ZCREMAD0.CREMADDMD,3,2)} || '-' || {fn substring(SAB089.ZCREMAD0.CREMADDMD,1,2)} as StartDate,
{fn substring(SAB089.ZCREAVI0.CREAVIECH,5,2)} || '-' || {fn substring(SAB089.ZCREAVI0.CREAVIECH,3,2)} || '-' || {fn substring(SAB089.ZCREAVI0.CREAVIECH,1,2)} as RealEndDate
FROM
SAB089.ZCREAVI0, SAB089.ZIMPDOS0, SAB089.ZIMPECH0, SAB089.ZCREMAD0
INNER JOIN SAB089.ZCREPRE0 ON (SAB089.ZCREPRE0.CREPREETA=SAB089.ZCREMAD0.CREMADETA and SAB089.ZCREPRE0.CREPREAGE=SAB089.ZCREMAD0.CREMADAGE and SAB089.ZCREPRE0.CREPRESCE=SAB089.ZCREMAD0.CREMADSER and SAB089.ZCREPRE0.CREPRESSE=SAB089.ZCREMAD0.CREMADSSE and SAB089.ZCREPRE0.CREPREDOS=SAB089.ZCREMAD0.CREMADDOS and SAB089.ZCREPRE0.CREPREPRE=SAB089.ZCREMAD0.CREMADPRE)
INNER JOIN SAB089.ZCREPLA0 ON (SAB089.ZCREPLA0.CREPLAETA=SAB089.ZCREPRE0.CREPREETA and SAB089.ZCREPLA0.CREPLAAGE=SAB089.ZCREPRE0.CREPREAGE and SAB089.ZCREPLA0.CREPLASER=SAB089.ZCREPRE0.CREPRESCE and SAB089.ZCREPLA0.CREPLASSE=SAB089.ZCREPRE0.CREPRESSE and SAB089.ZCREPLA0.CREPLADOS=SAB089.ZCREPRE0.CREPREDOS and SAB089.ZCREPLA0.CREPLAPRE=SAB089.ZCREPRE0.CREPREPRE)
INNER JOIN SAB089.ZCREDOS0 ON (SAB089.ZCREDOS0.CREDOSETA=SAB089.ZCREPRE0.CREPREETA and SAB089.ZCREDOS0.CREDOSAGE=SAB089.ZCREPRE0.CREPREAGE and SAB089.ZCREDOS0.CREDOSSER=SAB089.ZCREPRE0.CREPRESCE and SAB089.ZCREDOS0.CREDOSSSE=SAB089.ZCREPRE0.CREPRESSE and SAB089.ZCREDOS0.CREDOSDOS=SAB089.ZCREPRE0.CREPREDOS)
INNER JOIN SAB089.ZCREEMP0 ON (SAB089.ZCREDOS0.CREDOSETA=SAB089.ZCREEMP0.CREEMPETA and SAB089.ZCREDOS0.CREDOSAGE=SAB089.ZCREEMP0.CREEMPAGE and SAB089.ZCREDOS0.CREDOSSER=SAB089.ZCREEMP0.CREEMPSER and SAB089.ZCREDOS0.CREDOSSSE=SAB089.ZCREEMP0.CREEMPSSE and SAB089.ZCREDOS0.CREDOSDOS=SAB089.ZCREEMP0.CREEMPDOS)
INNER JOIN SAB089.ZCLIENA0 ON (SAB089.ZCLIENA0.CLIENACLI=SAB089.ZCREEMP0.CREEMPNCL)
LEFT OUTER JOIN SAB089.X89ADRESSE ON (SAB089.X89ADRESSE.ADRESCLI=SAB089.ZCLIENA0.CLIENACLI)
INNER JOIN SAB089.ZCLIENB0 ON (SAB089.ZCLIENA0.CLIENAETB=SAB089.ZCLIENB0.CLIENBETB and SAB089.ZCLIENA0.CLIENACLI=SAB089.ZCLIENB0.CLIENBCLI)
INNER JOIN SAB089.ZCLIENC0 ON (SAB089.ZCLIENA0.CLIENAETB=SAB089.ZCLIENC0.CLIENCETB and SAB089.ZCLIENA0.CLIENACLI=SAB089.ZCLIENC0.CLIENCCLI)
LEFT OUTER JOIN SAB089.ZCLILIB0 ON (SAB089.ZCLILIB0.CLILIBCLI=SAB089.ZCLIENA0.CLIENACLI)
WHERE
(
{fn substring(SAB089.ZCLILIB0.CLILIBVAL,13,1)} = 'O'
AND SAB089.ZCREMAD0.CREMADDMD >= '1120101'
AND SAB089.ZCREPRE0.CREPRECTA IN (6, 7, 8)
AND SAB089.ZCLIENA0.CLIENADOU = 'N'
)
When I press execute button, sometimes it is OK, and then I roll back and press execute button again and again, after have been made about 5 times, it show the error message:
This type of correlated subquery pattern is not supported due to
internal error
My query is as follows:
WITH HyperGroup AS (
select
'Group Type' ::text AS mm_type
,'Group Name' ::text AS mm_group
), number1 AS (
SELECT
SUM(fl.flower1 + fl.flower2 + fl.flower3 - fl.flower4) AS season
,'Group Type' ::text AS mm_type
,'Group Name' ::text AS mm_group
FROM (x_flwr1 as fl INNER JOIN x_flwr2 as grass
ON REPLACE(fl.flower5, ' ', '') = grass.flower6
AND TO_DATE(fl.flower7, 'YYYY/MM/DD') >= TO_DATE(CONCAT(grass.flower8, grass.flower9), 'YYYY/MM/DD')
AND fl.flower7 = (
SELECT MIN(fl2.flower7) FROM x_flwr1 as fl2
WHERE TO_DATE(fl.flower7, 'YYYY/MM/DD') >= TO_DATE(CONCAT(grass.flower8, grass.flower9), 'YYYY/MM/DD')
AND REPLACE(fl.flower5, ' ', '') = grass.flower6
)
)
WHERE
fl.flower10 != 'Flower10 Value'
AND fl.flower10 NOT LIKE 'M%'
AND fl.flower11 != 'Flower11 Value'
AND fl.flower12 != 0
AND fl.flower3 > 0
), number2 AS (
SELECT
SUM(fl.flower3 - fl.flower4) AS season
,'Group Type' ::text AS mm_type
,'Group Name' ::text AS mm_group
FROM (x_flwr1 as fl INNER JOIN x_flwr2 as grass
ON REPLACE(fl.flower5, ' ', '') = grass.flower6
AND TO_DATE(fl.flower7, 'YYYY/MM/DD') >= TO_DATE(CONCAT(grass.flower8, grass.flower9), 'YYYY/MM/DD')
AND fl.flower7 = (
SELECT MIN(fl2.flower7) FROM x_flwr1 as fl2
WHERE TO_DATE(fl.flower7, 'YYYY/MM/DD') >= TO_DATE(CONCAT(grass.flower8, grass.flower9), 'YYYY/MM/DD')
AND REPLACE(fl.flower5, ' ', '') = grass.flower6
))
WHERE
fl.flower10 != 'Flower10 Value'
AND fl.flower10 NOT LIKE 'M%'
AND fl.flower11 != 'Flower11 Value'
AND fl.flower12 != 0
AND fl.flower3 > 0
)
SELECT
count(*)
FROM
((HyperGroup LEFT OUTER JOIN number1 ON HyperGroup.mm_type = number1.mm_type AND HyperGroup.mm_group = number1.mm_group)
LEFT OUTER JOIN number2 ON HyperGroup.mm_type = number2.mm_type AND HyperGroup.mm_group = number2.mm_group)
Thanks a lot for any suggestions.
SELECT coalesce(RPAD('IN',16,' ') || RPAD( M.CASETYPE||'/' || M.CASENUMBER || '/' || M.CASEYEAR,16, ' '),' ') as inmatter
FROM (
select level as LEV, l1.LINKCASECCIN as CCI ,l1.linkcategorycode as lcode
from hclive.LINKEDMATTERS l1
start with l1.MAINCASECCIN ='001003201400100' and l1.linkcategorycode='I'
connect by nocycle prior l1.LINKCASECCIN = l1.MAINCASECCIN and l1.linkcategorycode = 'I'
) s1,
hclive.MAIN M
where M.CCIN=CCI
connect by is done with a recursive common table expression in Postgres.
with recursive tree as (
select 1 as level, l1.linkcaseccin as cci, l1.linkcategorycode as lcode
from hclive.linkedmatters l1
where l1.maincaseccin ='001003201400100'
and l1.linkcategorycode='I'
union all
select p.level + 1, c1.linkcaseccin as cci, c1.linkcategorycode as lcode
from hclive.linkedmatters c1
join tree p on p.maincaseccin = c1.linkcaseccin
where c1.linkcategorycode='I'
)
select coalesce(rpad('IN',16,' ') || rpad( m.casetype||'/' || m.casenumber || '/' || m.caseyear,16, ' '),' ') as inmatter
from tree t
join hclive.main M on m.ccin = t.cci;
The level column does not seem to be necessary as you don't use it at all in your query, but I left in there as an example to get the same information in Postgres.