Need to replace case statement in where clause - tsql

**The below query is working badly, and I'm planning to replace case stmt in where clause with temp table. Pls suggest to me some option to rewrite this query
Is there a way to simplify this into multiple SQLs
Also explain me how this case stmt works in where clause**
select DISTINCT
ph.order_type_cd,
c.order_num,
ph.created_date,
os.order_status_desc,
ph.facility_name,
PH.vendor_order_num,
l.lic_nm,
(u.last_nm + ', ' + u.first_nm )as requestor_nm,
bl.billing_location_desc,
ph.ship_to_name,
dm.dispatch_method_name_desc as courier,
PH.po_last_updated_dt as last_updated_date,
(u1.last_nm + ', ' + u1.first_nm )as last_updated_by,
ph.right_grp_id,
c.line_id,
a.material_product_id,
a.parent_material_product_id
from avt_po_detail c
inner join avt_po_hdr ph on ph.order_num = c.order_num
left outer join avt_material_product AS a on a.material_product_id=c.material_product_id
INNER JOIN #entity_ids po on po.entity_id = c.order_num --or #select_pos = 0 )
LEFT OUTER JOIN dbo.ert_product AS pc ON pc.product_id = a.product_id
left outer join ert_product_type as pt on pt.product_type_cd = pc.product_type_cd
LEFT OUTER JOIN dbo.ert_product_xref as xref on xref.product_id = a.parent_product_id AND xref.version_id = 1
left outer join avt_order_status AS OS ON OS.order_status_cd = PH.order_status_cd
left outer join avt_licensee l on l.lic_id = ph.lic_id
left outer join avt_po_from pf on pf.material_product_id = a.material_product_id and pf.line_id = c.line_id
left outer join avt_po_audio_detail pad on pad.line_id = c.line_id
left outer join avt_materials_trans_material MTM on mtm.sequence_no = c.video_seq_no
left outer join avt_user u on u.userid = ph.requestor_id
left outer join avt_user u1 on u1.userid = ph.po_last_updated_by
left outer join avt_billing_location bl on bl.billing_location_cd = PH.billing_location_cd
left outer join avt_dispatch_method_name dm on dm.dispatch_method_name_id = PH.dispatch_method_name_id
left outer join avt_right_group arg on arg.right_grp_id = ph.right_grp_id
left outer join #prod product on product.product_id=a.product_id and (product.version_id=c.dist_version_id OR product.version_id = 1)
where (pf.from_desc in ( select from_desc from #from_desc ) or #select_form = 0)
and (case WHEN c.dist_version_id IS NULL THEN c.UCS_prod_no
ELSE
CASE
WHEN isnull(pt.version_control_ind, 'N') = 'Y' THEN xref.rss_prod_no
WHEN
isnull(pt.version_control_ind, 'N') = 'N' AND
xref.rss_prod_no IS NULL AND
xref.rss_film_id IS NULL THEN xref.rss_titleid
WHEN
isnull(pt.version_control_ind, 'N') = 'N' AND
xref.rss_prod_no IS NOT NULL AND
xref.rss_film_id IS NULL THEN substring(pc.glacct, 24, 5) -- ASR 3290687
WHEN isnull(pt.version_control_ind, 'N') = 'N' AND xref.rss_film_id IS NOT NULL THEN isnull(substring(pc.glacct, 24, 5), -- ASR 3290687
(
SELECT substring(dbo.ert_product.glacct, 24, 5) -- ASR 3290687
FROM dbo.ert_product
WHERE dbo.ert_product.product_id = a.parent_product_id
))
END
END in (select prod_no from #prod_no) or #prod_no = 0)

Related

Postgres OUTER JOINS TABLE ALREADY JOINED

i'm facing issues migrating queries from Oracle to Postgres 15. How can i join a table that is already joined? The Oracle looks like this:
select ltd1.short_description || '_' || to_char( CASE WHEN lsd.origine_type_id = 2 THEN
lsd.data_normalizzazione_mail
ELSE lsd.data_normalizzazione_web
END, 'YYYYMMDD_HH24MISS' ) Transazione,
lkc.kit_name || '_' || lkc.doc_name Documento_Idkit_iddoc,
lp.codice_pratica Pratica,
to_char( CASE WHEN lsd.origine_type_id = 2 THEN lsd.data_normalizzazione_mail ELSE lsd.data_normalizzazione_web END, 'DD/MM/YYYY HH24:MI:SS' ) Data_Inizio,
ltd1.long_description Tipologia_Documento,
CASE WHEN lsd.origine_type_id = 2 THEN 'Digitale' ELSE 'Cartaceo' END Tipologia_Arrivo,
lsc.sla_period || ' ore' Sla,
to_char( lsd.data_fine_trans, 'DD/MM/YYYY HH24:MI:SS' ) Data_Fine_Lavorazione,
ltd2.short_description Fase_Lavorazione,
case when ((lsd.sla_period * 60) - lsd.min_elapsed) <= 0 then 999999999 else ((lsd.sla_period * 60) - lsd.min_elapsed) end Tempo_Residuo,
to_char( lsd.data_prevista_fine_sla, 'DD/MM/YYYY HH24:MI:SS' ) Data_Previsione_Chiusura_SLA,
lsd.alert_sla Alert,
lsd.stato_sla_type_id Stato_Lav,
lsd.in_sla,
lsd.out_of_sla OutSla
from gdf_suez.ld_sla_detail lsd,
gdf_suez.ls_type_description ltd1,
gdf_suez.ld_documenti ld,
gdf_suez.ls_kit_config lkc,
gdf_suez.ld_pratiche lp,
gdf_suez.ls_sla_config lsc,
gdf_suez.ls_type_description ltd2,
gdf_suez.ld_mail lm
where ltd1.context = 'DOC_TYPE_ID'
and ltd1.type_id = lsd.doc_type_id
and ld.trans_id(+) = lsd.trans_id
and lm.trans_id(+) = lsd.trans_id
and lkc.kit_id(+) = ld.kit_id
and lp.pratica_id(+) = ld.pratica_id
and lsc.doc_type_id = lsd.doc_type_id
and lsc.doc_subtype_id = lsd.doc_subtype_id
and lsc.giorno_id = 1
and ltd2.context = 'DOC_STATUS_TYPE_ID'
and ltd2.type_id = lsd.stato_sla_type_id
and decode( lsd.origine_type_id, 2, lsd.data_normalizzazione_mail, lsd.data_normalizzazione_web) between to_date( '2022-02-01', 'YYYY-MM-DD' ) and to_timestamp( '2022-02-28 23:59:59', 'YYYY-MM-DD HH24:MI:SS' )
and lsd.stato_trans_type_id >= 0
and lm.email_stato_type_id not in (6,16)
order by Alert desc, Stato_Lav, Tempo_Residuo
When i try to rewrite it on postgres, the table gdf_suez.ld_documenti ld needs to be joined to 3 tables, and one of those 3 needs to be joined to another table. How do i fix this?
Tried to rewrite the query but the error "table name "ld" specified more than once" is thrown
from gdf_suez.ld_sla_detail lsd
LEFT OUTER JOIN gdf_suez.ld_documenti ld ON lsd.trans_id = ld.trans_id
LEFT OUTER JOIN gdf_suez.ld_mail lm ON lsd.trans_id = lm.trans_id,
gdf_suez.ls_type_description ltd1,
gdf_suez.ld_documenti ld
LEFT OUTER JOIN gdf_suez.ls_kit_config lkc ON ld.kit_id = lkc.kit_id
LEFT OUTER JOIN gdf_suez.ld_pratiche lp ON ld.pratica_id = lp.pratica_id,
gdf_suez.ls_sla_config lsc,
gdf_suez.ls_type_description ltd2
It is always easy to translate from Oracle's outdated outer join syntax to the more powerful syntax of the SQL standard: put everything that has a (+) on the right side of a LEFT JOIN. So your FROM clause would become
FROM gdf_suez.ls_type_description AS ltd1
JOIN gdf_suez.ld_sla_detail AS lsd
ON ltd1.type_id = lsd.doc_type_id
JOIN gdf_suez.ls_sla_config AS lsc
ON lsc.doc_type_id = lsd.doc_type_id
AND lsc.doc_subtype_id = lsd.doc_subtype_id
JOIN gdf_suez.ls_type_description AS ltd2
ON ltd2.type_id = lsd.stato_sla_type_id
LEFT JOIN gdf_suez.ld_mail AS lm
ON lm.trans_id = lsd.trans_id
LEFT JOIN gdf_suez.ld_documenti AS ld
ON ld.trans_id = lsd.trans_id
LEFT JOIN gdf_suez.ls_kit_config AS lkc
ON lkc.kit_id = ld.kit_id
LEFT JOIN gdf_suez.ld_pratiche AS lp
ON lp.pratica_id = ld.pratica_id

Case Condition to join columns

Msg 156, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'CASE'
I am trying to join columns based on the column value.
If case conditon 1 is true then i want to join
ON im.ItemNumber = left(tr.itemnumber,len(tr.itemnumber)-4)
if Case condition 2 is true then
ON tr.ItemNumber = im.LegacyItemNumber
else
tr.ItemNumber = im.ItemNumber
SELECT
im.Category as RootCategory,GETDATE() AS LoadDate,tr.*
into transactionreport_stage_testNN
FROM transaction tr
LEFT OUTER JOIN ALLDW_ora.dbo.Location(NOLOCK) loc ON tr.location=loc.location
CASE
when
right(tr.itemnumber,4) = '_old' then
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON im.ItemNumber = left(tr.itemnumber,len(tr.itemnumber)-4)
when
tr.itemnumber <> im.ItemNumber
then
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON tr.ItemNumber = im.LegacyItemNumber
else
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON tr.ItemNumber = im.itemnumber
end
AND im.Location=loc.LocationNo
Schema
You should probably just use AND's and OR's
LEFT OUTER JOIN [Inventory](NOLOCK) im ON im.Location=loc.LocationNo
AND (
(right(tr.itemnumber,4) = '_old' AND im.ItemNumber = left(tr.itemnumber,len(tr.itemnumber)-4))
OR
(tr.itemnumber <> im.ItemNumber AND tr.ItemNumber = im.LegacyItemNumber)
OR
(tr.ItemNumber = im.itemnumber)
)
it may just be as simple as
SELECT im.Category AS RootCategory,
GETDATE() AS LoadDate,
tr.*
INTO #transactionreport_stage_testNN
FROM [transaction] tr
LEFT OUTER JOIN ALLDW_ora.dbo.Location (NOLOCK) loc ON tr.location = loc.location
LEFT OUTER JOIN [Inventory] (NOLOCK) im ON im.Location = loc.LocationNo
AND REPLACE(tr.itemnumber, '_old', '') IN (im.itemnumber, im.legacyitemnumber)

i am geting error: PLS-00402: alias required in SELECT list of cursor to avoid duplicate column names

I have created this procedure with select data prom different tables
and populate it into one table. i am getting error:"PLS-00402: alias
required in SELECT list of cursor to avoid duplicate column names"
while compling the code
create or replace procedure hrps.Employeeall
is
cursor EMA_FILL_EMPL_ALL
IS
SELECT DISTINCT base.eme_perno " EMPL BASE PNO",
CAR.CAR_COMP_CD "COMP CODE",
PER.EPR_SALUTATION,
PER.EPR_FST_NAME,
PER.EPR_MID_NAME,
PER.EPR_LST_NAME,
TRIM(per.EPR_SALUTATION) || ' '||TRIM(per.EPR_FST_NAME) || ' ' || TRIM(per.EPR_MID_NAME) || ' ' || TRIM(per.EPR_LST_NAME) "Name",
BASE.EME_DOB,
per.epr_gender "GENDER",
NULL z1,
PER.EPR_DIFF_ABLE,
PER.EPR_DIFF_ABLE_DESC,
BASE.EME_BLOOD_GRP,
PER.EPR_AFF_ACT,
DOJ.idt_dt,
BASE.EME_CADRE,
C3.IRC_DESC cd3,
car.car_emp_class,
CAR.CAR_EMP_TYP,
BASE.EME_EMPL_STATUS,
BASE.EME_SOURCE_EMPLMNT,
CAR.CAR_PYRL,
PYRL.IPY_PYRL_DESC,
car.car_dept_cd "DEPT CODE",
org_dept.oro_desc "DEPT DESC",
car.car_sec_cd "SECTION CODE",
org_sec.oro_desc "SECTION DESC",
car.car_desgn_cd "DESGN CODE",
DES.IDS_DESGN_DESC "DESGN DESC",
CAR.CAR_PER_GRADE_CD,
CAR.CAR_SUB_GRADE_CD,
NULL z2,
NULL z3,
NULL z4,
NULL z5,
CAR.CAR_PYRL_AREA,
C1.IRC_DESC cd1,
CAR.CAR_COST_CENT_CD,
C2.IRC_DESC cd2,
NULL z6,
NULL z7,
DOS.IDT_DT,
CAR_SEP.CAR_ACTION_RSN,
C4.IRC_DESC cd4,
PDT.IDT_DT,
EDR.IDT_DT,
NULL z8,
PROM.IDT_DT,
INC.IDT_DT,
NULL z9,
NULL z10,
C5.IRC_DESC cd5,
car.car_exec_cd "EXEC HEAD",
org_exe.oro_desc "EXEC HEAD DESC",
car.car_grp_cd "GROUP CODE",
org_grp.oro_desc "GROUP DESC",
car.car_pu_cd " PU CODE",
org_pu.idp_pu_desc "PU DESC",
car.car_position_id "POSITION ID",
NULL z11,
NULL z12,
NULL z13,
NULL z14,
FATHER.FML_FSTNAME || ' ' || FATHER.FML_MIDNAME || ' ' || FATHER.FML_LSTNAME F_NAME,
SPOUCE.FML_FSTNAME || ' ' || SPOUCE.FML_MIDNAME || ' ' || SPOUCE.FML_LSTNAME S_NAME,
TRGSD.IDT_DT,
TRGED.IDT_DT,
NULL z15,
NULL z16,
NULL z17,
NULL z18,
PAN.EID_ID,
PHONE.EMC_CONTACT,
EMAIL.EMC_CONTACT,
PER.EPR_RELIGION,
PER.EPR_NATIVE_STATE,
PER.EPR_NATIONALITY,
NULL z19,
NULL z20,
NULL z21,
SYSDATE date1,
'157068' num1,
SYSDATE date2,
'157068' num2
fROM t_empl_base base
LEFT OUTER JOIN
t_ir_em_career_dtls car
ON base.eme_perno = car.car_eme_perno
AND car.car_end_dt = '31-dec-9999'
LEFT OUTER JOIN
t_ir_em_career_dtls car_SEP
ON base.eme_perno = car_SEP.car_eme_perno
AND CAR_SEP.CAR_ACTION_TYPE ='SP'
LEFT OUTER JOIN
t_ir_em_personal per
ON base.eme_perno = per.epr_eme_perno
AND per.epr_end_dt = '31-dec-9999'
LEFT OUTER JOIN
T_IR_DESGN DES
ON DES.IDS_DESGN_CODE= CAR.CAR_DESGN_CD
AND DES.IDS_LOCATION = CAR.CAR_LOC_CD
AND DES.IDS_END_DT='31-DEC-9999'
LEFT OUTER JOIN
t_ir_em_impdt pdt
ON base.eme_perno = pdt.idt_eme_perno
AND pdt.idt_type = '03'
LEFT OUTER JOIN
t_ir_em_impdt DOJ
ON base.eme_perno = DOJ.idt_eme_perno
AND DOJ.idt_type = '02'
LEFT OUTER JOIN
t_ir_em_impdt DOS
ON base.eme_perno = DOS.idt_eme_perno
AND DOS.idt_type = '04'
LEFT OUTER JOIN
t_ir_em_impdt EDR
ON base.eme_perno = EDR.idt_eme_perno
AND EDR.idt_type = '07'
LEFT OUTER JOIN
t_ir_em_impdt PROM
ON base.eme_perno = PROM.idt_eme_perno
AND PROM.idt_type = '08'
LEFT OUTER JOIN
t_ir_em_impdt INC
ON base.eme_perno = INC.idt_eme_perno
AND INC.idt_type = '09'
LEFT OUTER JOIN
t_ir_em_impdt TRGSD
ON base.eme_perno = TRGSD.idt_eme_perno
AND TRGSD.idt_type = '12'
LEFT OUTER JOIN
t_ir_em_impdt TRGED
ON base.eme_perno = TRGSD.idt_eme_perno
AND TRGSD.idt_type = '13'
LEFT OUTER JOIN
T_IR_EM_FAMILY FATHER
ON FATHER.FML_EME_PERNO= BASE.EME_PERNO
AND FATHER.FML_TYPE ='06'
LEFT OUTER JOIN
T_IR_EM_FAMILY SPOUCE
ON SPOUCE.FML_EME_PERNO= BASE.EME_PERNO
AND SPOUCE.FML_TYPE IN ('01','02')
LEFT OUTER JOIN
T_IR_PYRL PYRL
ON CAR.CAR_PYRL = PYRL.IPY_PYRL_NO
AND PYRL.IPY_END_DATE = '31-DEC-9999'
AND PYRL.IPY_LOCN_CD = CAR.CAR_LOC_CD
AND PYRL.IPY_VALID_TAG ='Y'
LEFT OUTER JOIN
t_ir_codes c2
ON TRIM (CAR.CAR_COST_CENT_CD ) = c2.irc_code
AND c2.irc_type = 'COSTC'
LEFT OUTER JOIN
t_ir_codes c1
ON TRIM (CAR.CAR_PYRL_AREA ) = c1.irc_code
AND c1.irc_type = 'PYARA'
LEFT OUTER JOIN
t_ir_codes c3
ON BASE.EME_CADRE = c3.irc_code
AND c3.irc_type = 'CADRE'
LEFT OUTER JOIN
t_ir_codes c4
ON CAR_SEP.CAR_ACTION_RSN = c4.irc_code
AND c4.irc_type = 'SEPAR'
LEFT OUTER JOIN
t_ir_codes c5
ON CAR.CAR_COMP_CD = c5.irc_code
AND c5.irc_type = 'COMP'
LEFT OUTER JOIN
T_IR_EM_ID PAN
ON PAN.EID_EME_PERNO=BASE.EME_PERNO
AND PAN.EID_ID_CODE= '02'
LEFT OUTER JOIN
T_IR_EM_CONTACT PHONE
ON PHONE.EMC_EME_PERNO =BASE.EME_PERNO
AND PHONE.EMC_CONTACT_TYPE= '04'
AND PHONE.EMC_END_DATE='31-DEC-9999'
LEFT OUTER JOIN
T_IR_EM_CONTACT EMAIL
ON EMAIL.EMC_EME_PERNO =BASE.EME_PERNO
AND EMAIL.EMC_CONTACT_TYPE= '03'
AND EMAIL.EMC_END_DATE='31-DEC-9999'
LEFT OUTER JOIN
(SELECT DISTINCT oro_object_id, oro_desc
FROM t_org_object o
WHERE o.oro_str_type = 'IRSTR'
AND o.oro_end_date = '31-DEC-9999'
AND o.oro_type = 'EX') org_exe
ON org_exe.oro_object_id = car.car_exec_cd
LEFT OUTER JOIN
(SELECT DISTINCT oro_object_id, oro_desc
FROM t_org_object o
WHERE o.oro_str_type = 'IRSTR'
AND o.oro_end_date = '31-DEC-9999'
AND o.oro_type = 'GR') org_grp
ON org_grp.oro_object_id = car.car_grp_cd
LEFT OUTER JOIN
(SELECT DISTINCT oro_object_id, oro_desc
FROM t_org_object o
WHERE o.oro_str_type = 'IRSTR'
AND o.oro_end_date = '31-DEC-9999'
AND o.oro_type = 'DP') org_dept
ON org_dept.oro_object_id = car.car_dept_cd
LEFT OUTER JOIN
(SELECT DISTINCT oro_object_id, oro_desc
FROM t_org_object o
WHERE o.oro_str_type = 'IRSTR'
AND o.oro_end_date = '31-DEC-9999'
AND o.oro_type = 'SE') org_sec
ON org_sec.oro_object_id = car.car_sec_cd
LEFT OUTER JOIN
(SELECT DISTINCT idp_pu_code, idp_pu_desc
FROM t_ir_dept_pu o
WHERE o.idp_end_dt = '31-DEC-9999') org_pu
ON org_pu.idp_pu_code = car.car_pu_cd
WHERE base.eme_empl_status = '1';
ct EMA_FILL_EMPL_ALL%ROWTYPE;
BEGIN
FOR CT IN EMA_FILL_EMPL_ALL
LOOP
INSERT INTO T_EMPL_COMN (
EMA_PERNO,
EMA_COMP_CD,
EMA_SALUTATION,
EMA_FST_NAME,
EMA_MID_NAME,
EMA_LST_NAME,
EMA_ENAME,
EMA_BIRTH_DT,
EMA_GENDER,
EMA_MARITAL_STATUS,
EMA_DIFF_ABLE_CD,
EMA_DIFF_ABLE_DESC,
EMA_BLOODGRP,
EMA_AFFIRMATIVE_ACTION_CD,
EMA_JOINING_DT,
EMA_CADRE,
EMA_CADRE_DESC,
EMA_EMP_CLASS,
EMA_EMP_TYPE,
EMA_EMPL_STATUS,
EMA_SOURCE_EMPLMNT,
EMA_PYRL,
EMA_PYRL_DESC,
EMA_DEPT_CD,
EMA_DEPT_DESC,
EMA_SECTION_CD,
EMA_SECTION_DESC,
EMA_DESGN_CD,
EMA_DESGN_DESC,
EMA_EMPL_PGRADE,
EMA_EMPL_SGRADE,
EMA_PERS_AREA,
EMA_PERS_AREA_DESC,
EMA_PERS_SUBAREA,
EMA_PERS_SUBAREA_DESC,
EMA_PYRL_AREA,
EMA_PYRL_AREA_DESC,
EMA_COST_CENTER_CD,
EMA_COST_CENTER_DESC,
EMA_PROFIT_CENTER_CD,
EMA_PROFIT_CENTER_DESC,
EMA_DISCH_DT,
EMA_DISCH_RSN_CD,
EMA_DISCH_RSN_DESC,
EMA_CS_DATE,
EMA_EXP_RETIRE_DT,
EMA_TRF_DT,
EMA_PROM_DT,
EMA_INCR_DT,
EMA_UNION_IND,
EMA_UNION_DESC,
EMA_COMP_DESC,
EMA_EXEC_HEAD,
EMA_EXEC_HEAD_DESC,
EMA_GROUP,
EMA_GROUP_DESC,
EMA_PU,
EMA_PU_DESC,
EMA_POSITION_ID,
EMA_REPORTING_TO_PNO,
EMA_DEPT_HEAD_PNO,
EMA_PERS_EXEC_PNO,
EMA_REF_PNO,
EMA_FATHERS_NAME,
EMA_SPOUSE_NAME,
EMA_TRG_ST_DT,
EMA_TRG_EN_DT,
EMA_FPF_ACNO,
EMA_EFBS_IND,
EMA_BANK_ACNO,
EMA_BANK_CD,
EMA_PANNO,
EMA_PHONE_NO,
EMA_EMAIL_ID,
EMA_RELIGION,
EMA_NATIVE_STATE,
EMA_NATIONALITY,
EMA_CHK_HOUSE,
EMA_WRK_CHK_HOUSE,
EMA_PYRL_STOP_DATE,
EMA_ENTRY_DATE,
EMA_ENTRY_USER,
EMA_LAST_UPDATE_DATE,
EMA_LAST_UPDATE_USER
)
VALUES( CT.base.eme_perno ,
CT.CAR.CAR_COMP_CD,
CT.PER.EPR_SALUTATION,
CT.PER.EPR_FST_NAME,
CT.PER.EPR_MID_NAME,
CT.PER.EPR_LST_NAME,
CT.HRPS.POP_NAME_FETCH(BASE.EME_PERNO),
CT.BASE.EME_DOB,
CT.per.epr_gender,
NULL,
CT.PER.EPR_DIFF_ABLE,
CT.PER.EPR_DIFF_ABLE_DESC,
CT.BASE.EME_BLOOD_GRP,
CT.PER.EPR_AFF_ACT,
CT.DOJ.idt_dt,
CT.BASE.EME_CADRE,
CT.C3.IRC_DESC,
CT.car.car_emp_class,
CT.CAR.CAR_EMP_TYP,
CT.BASE.EME_EMPL_STATUS,
CT.BASE.EME_SOURCE_EMPLMNT,
CT.CAR.CAR_PYRL,
CT.PYRL.IPY_PYRL_DESC,
CT.car.car_dept_cd ,
CT.org_dept.oro_desc ,
CT.car.car_sec_cd ,
CT.org_sec.oro_desc ,
CT.car.car_desgn_cd ,
CT.DES.IDS_DESGN_DESC ,
CT.CAR.CAR_PER_GRADE_CD,
CT.CAR.CAR_SUB_GRADE_CD,
NULL,
NULL,
NULL,
NULL,
CT.CAR.CAR_PYRL_AREA,
CT.C1.IRC_DESC,
CT.CAR.CAR_COST_CENT_CD,
CT.C2.IRC_DESC,
NULL,
NULL,
CT.DOS.IDT_DT,
CT.CAR_SEP.CAR_ACTION_RSN,
CT.C4.IRC_DESC,
CT.PDT.IDT_DT,
CT.EDR.IDT_DT,
NULL,
CT.PROM.IDT_DT,
CT.INC.IDT_DT,
NULL,
NULL,
CT.C5.IRC_DESC,
CT.car.car_exec_cd,
CT.org_exe.oro_desc ,
CT.car.car_grp_cd ,
CT.org_grp.oro_desc ,
CT.car.car_pu_cd ,
CT.org_pu.idp_pu_desc ,
CT.car.car_position_id,
NULL,
NULL,
NULL,
NULL,
CT.F_NAME,
CT.S_NAME,
CT.TRGSD.IDT_DT,
CT.TRGED.IDT_DT,
NULL,
NULL,
NULL,
NULL,
CT.PAN.EID_ID,
CT.PHONE.EMC_CONTACT,
CT.EMAIL.EMC_CONTACT,
CT.PER.EPR_RELIGION,
CT.PER.EPR_NATIVE_STATE,
CT.PER.EPR_NATIONALITY,
NULL,
NULL,
NULL,
SYSDATE,
'157068',
SYSDATE,
'157068');
END LOOP;
END Employeeall;
you have to make sure each column has a different alias when its in a stored proc.
ie i see duplicates:
DOJ.idt_dt,
DOS.IDT_DT,
PDT.IDT_DT,
EDR.IDT_DT,
PROM.IDT_DT,
INC.IDT_DT,
TRGSD.IDT_DT,
TRGED.IDT_DT,
just add a unique alias for each one like you've done for some of the other columns.

Eliminating NULL rows in TSQL query [duplicate]

This question already has an answer here:
Closed 10 years ago.
Possible Duplicate:
How to eliminate NULL fields in TSQL
I am using SSMS 2008 R2 and am developing a TSQL query. I want just 1 record / profile_name. Because some of these values are NULL, I am currently doing LEFT JOINS on most of the tables. But the problem with the LEFT JOINs is that now I get > 1 record for some profile_names!
But if I change this to INNER JOINs then some profile_names are excluded entirely because they have NULL values for these columns. How do I limit the query result to just one record / profile_name regardless of NULL values? And if there are non-NULL values then I want it to choose the record with non-NULL values. Here is initial query:
select distinct
gp.group_profile_id,
gp.profile_name,
gp.license_number,
gp.is_accepting,
case when gp.is_accepting = 1 then 'Yes'
when gp.is_accepting = 0 then 'No '
end as is_accepting_placement,
mo.profile_name as managing_office,
regions.[region_description] as region,
pv.vendor_name,
pv.id as vendor_id,
at.description as applicant_type,
dbo.GetGroupAddress(gp.group_profile_id, null, 0) as [Office Address],
gsv.status_description
from group_profile gp With (NoLock)
inner join group_profile_type gpt With (NoLock) on gp.group_profile_type_id = gpt.group_profile_type_id and gpt.type_code = 'FOSTERHOME' and gp.agency_id = #agency_id and gp.is_deleted = 0
inner join group_profile mo With (NoLock) on gp.managing_office_id = mo.group_profile_id
left outer join payor_vendor pv With (NoLock) on gp.payor_vendor_id = pv.payor_vendor_id
left outer join applicant_type at With (NoLock) on gp.applicant_type_id = at.applicant_type_id and at.is_foster_home = 1
inner join group_status_view gsv With (NoLock) on gp.group_profile_id = gsv.group_profile_id and gsv.status_value = 'OPEN' and gsv.effective_date =
(Select max(b.effective_date) from group_status_view b With (NoLock)
where gp.group_profile_id = b.group_profile_id)
left outer join regions With (NoLock) on isnull(mo.regions_id, gp.regions_id) = regions.regions_id
left join enrollment en on en.group_profile_id = gp.group_profile_id
join event_log el on el.event_log_id = en.event_log_id
left join people client on client.people_id = el.people_id
As you can see, the results of the above query is 1 row / profile_name:
group_profile_id profile_name license_number is_accepting is_accepting_placement managing_office region vendor_name vendor_id applicant_type Office Address status_description Cert Date2
But now watch what happens when I add in 2 LEFT JOINs and 1 additional column:
select distinct
gp.group_profile_id,
gp.profile_name,
gp.license_number,
gp.is_accepting,
case when gp.is_accepting = 1 then 'Yes'
when gp.is_accepting = 0 then 'No '
end as is_accepting_placement,
mo.profile_name as managing_office,
regions.[region_description] as region,
pv.vendor_name,
pv.id as vendor_id,
at.description as applicant_type,
dbo.GetGroupAddress(gp.group_profile_id, null, 0) as [Office Address],
gsv.status_description,
ri.[description] as race
from group_profile gp With (NoLock)
inner join group_profile_type gpt With (NoLock) on gp.group_profile_type_id = gpt.group_profile_type_id and gpt.type_code = 'FOSTERHOME' and gp.agency_id = #agency_id and gp.is_deleted = 0
inner join group_profile mo With (NoLock) on gp.managing_office_id = mo.group_profile_id
left outer join payor_vendor pv With (NoLock) on gp.payor_vendor_id = pv.payor_vendor_id
left outer join applicant_type at With (NoLock) on gp.applicant_type_id = at.applicant_type_id and at.is_foster_home = 1
inner join group_status_view gsv With (NoLock) on gp.group_profile_id = gsv.group_profile_id and gsv.status_value = 'OPEN' and gsv.effective_date =
(Select max(b.effective_date) from group_status_view b With (NoLock)
where gp.group_profile_id = b.group_profile_id)
left outer join regions With (NoLock) on isnull(mo.regions_id, gp.regions_id) = regions.regions_id
left join enrollment en on en.group_profile_id = gp.group_profile_id
join event_log el on el.event_log_id = en.event_log_id
left join people client on client.people_id = el.people_id
left join race With (NoLock) on el.people_id = race.people_id
left join race_info ri with (nolock) on ri.race_info_id = race.race_info_id
The above query results in all of the same profile_names, but some with NULL race values:
group_profile_id profile_name license_number is_accepting is_accepting_placement managing_office region vendor_name vendor_id applicant_type Office Address status_description Cert Date2 race
Unfortunately it complicates matters that I need to join in 2 additional tables for this one additional field value (race). If I simply change the last two LEFT JOINs above to INNER JOINs then I eliminate the NULL rows above. But I also eliminate some of the profile_names:
group_profile_id profile_name license_number is_accepting is_accepting_placement managing_office region vendor_name vendor_id applicant_type Office Address status_description Cert Date2 race
Hopefully I have provided all of the details that you need for this question.
Not the most elegant solution, but one that will work:
select [stuff]
from group_profile gp With (NoLock)
inner join group_profile_type gpt With (NoLock) on gp.group_profile_type_id = gpt.group_profile_type_id and gpt.type_code = 'FOSTERHOME' and gp.agency_id = #agency_id and gp.is_deleted = 0
inner join group_profile mo With (NoLock) on gp.managing_office_id = mo.group_profile_id
join payor_vendor pv on ISNULL(gp.payor_vendor_id, 'THISVALUEWILLNEVEROCCUR') = ISNULL(pv.payor_vendor_id, 'THISVALUEWILLNEVEROCCUR')
...etc...
Biggest issue with what I posted is that you'll be doing a whole lot of table scans.

T-SQL Nested Subquery

I want to place this working code within a SQL Statement, OR do I need to perform a UDF.
The result set is a one line concatenation, and I want it to be place in every one of the overall result set lines.
----
MAIN QUERY
SELECT
H.CONNECTION_ID,
H.SEQUENTIAL_NO,
H.INVOICE_NUMBER,
H.INVOICE_DATE,
H.LAST_INVOICE_NUMBER,
H.LAST_INVOICE_DATE,
CAST(CASE
WHEN H.COLLECT_DEPOSIT = 1 THEN '-'
ELSE CAST(H.PAYMENT_DUE_DATE AS NVARCHAR(20))
END AS SMALLDATETIME) AS PAYMENT_DUE,
H.JOB_NUMBER,
H.CUST_JOB_NUMBER,
HDR.SALES_PERSON,
H.INSIDE_SALES_PERSON,
H.IS_LAST_INVOICE,
CASE
WHEN H.COLLECT_DEPOSIT = 1 THEN 'CASH'
ELSE H.PAYMENT_TERMS_DESCRIPTION
END AS PAYMENT_TERMS,
H.PRINTED,
H.NOTES,
CUR.ID,
CUR.CODE,
CASE CUR.CODE
WHEN 'USD' THEN '001-106624-211'
WHEN 'EUR' THEN '001-106624-101'
WHEN 'GBP' THEN '001-106624-100'
ELSE '001-106624-001'
END AS BANK_ACCT,
CUR.EXCHANGE_RATE,
H.BILL_CONTACT,
H.CUST_ACCOUNT,
H.CUST_NAME,
H.CUST_ADDR1,
H.CUST_ADDR2,
H.CUST_CITY,
H.CUST_STATE,
H.CUST_ZIP,
H.CONTACT_PHONE_NUMBER,
H.CONTACT_PHONE_NUMBER2,
H.ORDERED_BY_CONTACT,
H.SHIP_TO_NAME,
H.SHIP_TO_ADDR1,
H.SHIP_TO_ADDR2,
H.SHIP_TO_CITY,
H.SHIP_TO_STATE,
H.SHIP_TO_ZIP,
H.SITE_PHONE_NUMBER,
H.SITE_PHONE_NUMBER2,
H.OFFICE_NAME,
H.OFFICE_ADDR1,
H.OFFICE_ADDR2,
H.OFFICE_CITY,
H.OFFICE_STATE,
H.OFFICE_ZIP,
H.OFFICE_PHONE_NUMBER,
H.OFFICE_FAX_NUMBER,
H.DELIVERY_TICKET_NUMBER,
H.PO_NUMBER,
H.DUMMY_INVOICE_TEXT,
(SELECT MESSAGE FROM REPORT_MESSAGES WHERE CODE = 'INVOICE') ADVERT_MESSAGE,
(SELECT MAX(DISCOUNT_PERCENTAGE) FROM PRTINVITEM I2 WHERE I2.CONNECTION_ID = H.CONNECTION_ID AND I2.INVOICE_NUMBER = H.INVOICE_NUMBER) AS MAX_DISCOUNT,
I.ITEM,
I.DESCRIPTION,
I.QUANTITY,
I.UNIT_OF_MEASURE,
I.MINIMUM_CHARGE,
I.WEEKLY_CHARGE,
I.MONTHLY_CHARGE,
I.START_OF_BILLING_PERIOD,
I.END_OF_BILLING_PERIOD,
I.DAYS_USED,
I.WEEKS_USED,
I.DISCOUNT_PERCENTAGE,
I.TAX_CODE_FOR_ITEM,
I.INVENTORY_TYPE,
I.BILLING_LOGIC_TYPE,
I.ACTUAL_WEEKLY_CHARGE_USED,
I.DAYS_IN_ACTUAL_WEEKLY_CHARGE,
II.CHARGEABLE_DAYS,
II.CHARGEABLE_WEEKS,
II.CHARGEABLE_MONTHS,
II.FREE_DAYS_THIS_INVOICE,
CNV.TOTAL_NET_VALUE,
CNV.TOTAL_TAX_VALUE,
CNV.TOTAL_GROSS_VALUE,
CNV.TOTAL_GROSS_VALUE_NS,
CNV.NET_LINE_VALUE,
CMP.EMAIL_ADDRESS
FROM (PRTINVHDR H INNER JOIN PRTINVITEM I ON H.CONNECTION_ID = I.CONNECTION_ID AND H.INVOICE_NUMBER = I.INVOICE_NUMBER)
INNER JOIN INVOICEHDR HDR ON I.INVOICE_NUMBER = HDR.INVNO
INNER JOIN CUSTOMERS CST ON H.CUST_ACCOUNT = CST.CUSTNUM
INNER JOIN JOB JOB ON H.JOB_NUMBER = JOB.JOBNUM
INNER JOIN CURRENCY CUR ON HDR.CURRENCY_ID = CUR.ID
INNER JOIN VWCURRENCYCONVERSION CNV ON I.CONNECTION_ID = CNV.CONNECTION_ID AND I.INVC_UCOUNTER = CNV.INVC_UCOUNTER
INNER JOIN COMPANY CMP ON H.OFFICE_CODE = CMP.OFFICE
INNER JOIN INVOICEITEM II ON I.INVOICE_NUMBER = II.INVNO AND I.INVC_UCOUNTER = II.INVC_UCOUNTER
ORDER BY
H.SEQUENTIAL_NO,
I.PRINT_SEQUENCE
ASC
----
COALESCE QUERY
DECLARE
#DTICKET NVARCHAR(20),
#PUMPCATEGORYNAME NVARCHAR(3999)
SET #DTICKET = ''
SET #PUMPCATEGORYNAME = NULL
(SELECT
#DTICKET = DTICKET,
#PUMPCATEGORYNAME = COALESCE(#PUMPCATEGORYNAME + ', ', '' ) + PUMPCATEGORYNAME
FROM (SELECT
BHDR.DTICKET,
SCD.PUMPCATEGORYNAME
FROM PRTTICKHDR PHDR
INNER JOIN BIDHDR BHDR ON PHDR.DELIV_TICKET_NUMBER = BHDR.DTICKET
INNER JOIN PRTTICKITEM PITM ON PHDR.CONNECTION_ID = PITM.CONNECTION_ID AND PHDR.DELIV_TICKET_NUMBER = PITM.DELIV_TICKET_NUMBER
LEFT JOIN SUBCATEGORYDESCRIPTION SCD ON PITM.ITEM = SCD.PUMPCATEGORY
WHERE SCD.PUMPCATEGORYNAME IS NOT NULL)
SUBCATEGORYDESCRIPTION)
SELECT #DTICKET, #PUMPCATEGORYNAME
Not really sure what you are asking for but you can doing something along the lines of
Select col1 + ', ' + col2 + ', ' + col3 etc....