десятичное значение 0,00 возвращать не следует

#sql

#sql

Вопрос:

у меня большой запрос, и один из моих столбцов (DUTY_COST) не должен возвращать значения 0,00, однако, что бы я ни пытался, я не могу исключить значение из записей.

Из-за количества столбцов фактические/Ожидаемые результаты ниже я ограничился последними тремя столбцами, но полный запрос приведен ниже.

Буду признателен за любую помощь.

Фактический Результат

DUTY_COST ARAT CSNO
0 1.2635 6202.93.00.10
641.03 1.2635 6202.93.00.10

ожидаемый результат

DUTY_COST ARAT CSNO
641.03 1.2635 6202.93.00.10

Ожидаемый результат для отображения IV.CEID в отдельных столбцах с использованием случая, когда

DUTY_COST DUTY_KG_СОСТАВ FREIGHT_COST БРОКЕР_СОСТ ARAT
641.03 0 178.72 2.16 1.2635

Мой вопрос:

 WITH CTE_FGLEDG AS ( SELECT * FROM FGLEDG ) SELECT DISTINCT F2.DIVI, F2.FACI, F2.WHLO, MW.WHNM, F2.SUNO, ID.SUNM, F2.PUNO, F9.SINO, F2.PNLI, F2.PNLS, MM.BUAR, MM.PRGP, MM.HDPR, F2.ITNO, MM.ITDS, --MITLAD - MD.FUDS, MH.TX15, MH.TY15, IA.DWDT, IB.CODT, IA.DUDT, IB.ORQA, IB.PUSL, IB.PUST, IB.OEND, F9.ACQT, IC.SUDO, IB.PROJ, IB.TEDL, IB.MODL, IA.CUCD, IB.PUPR, MT.TRPR, CASE WHEN IV.CEID = 'DUTY' AND IV.CEVA gt; '0' THEN IV.CEVA ELSE 0 END AS DUTY_COST, --CASE WHEN IV.CEID = 'DUTY/KG' THEN IV.CEVA ELSE 0 END AS DUTY_KG_COST, --CASE WHEN IV.CEID = 'FRTIN' THEN IV.CEVA ELSE 0 END AS FREIGHT_COST, --CASE WHEN IV.CEID = 'BRKG' THEN IV.CEVA ELSE 0 END AS BROKERAGE_COST, --CASE WHEN IV.CEID = 'DUTY' THEN IV.WSOP ELSE 0 END AS DUTY_RATE, F9.ARAT, M9.CSNO FROM FGRECL F2 LEFT JOIN CIDMAS ID ON ID.SUNO = F2.SUNO LEFT JOIN FPLEDG EP ON EP.SUNO = F2.SUNO LEFT JOIN CTE_FGLEDG CTE ON EP.JRNO = CTE.JRNO LEFT JOIN MITMAS MM ON F2.ITNO = MM.ITNO --LEFT JOIN MITLAD MD ON MD.ITNO = MM.ITNO AND MM.LNCD = 'GB' LEFT JOIN MITMAH MH ON F2.ITNO = MH.ITNO LEFT JOIN MPHEAD IA ON F2.PUNO = IA.PUNO LEFT JOIN MPLINE IB ON F2.PUNO = IB.PUNO AND F2.ITNO = IB.ITNO LEFT JOIN MPLIND IC ON F2.PUNO = IC.PUNO AND IC.PUOS = '45' LEFT JOIN MITFAC M9 ON F2.ITNO = M9.ITNO AND F2.FACI = M9.FACI LEFT JOIN MITWHL MW ON F2.WHLO = MW.WHLO LEFT JOIN MPOEXP IV ON F2.PUNO = IV.PUNO AND F2.PNLI = IV.PNLI AND F2.PNLS = IV.PNLS AND F2.CUCD = IV.CUCD LEFT JOIN MITTRA MT ON MT.RIDN = F2.PUNO AND MT.RIDL = F2.PNLI AND MT.WHLO = F2.WHLO AND MT.ITNO = F2.ITNO LEFT JOIN FGINAE F9 ON F9.CONO = F2.CONO AND F9.DIVI = F2.DIVI AND F9.SUNO = F2.SUNO AND F9.PUNO = F2.PUNO AND F9.PNLI = F2.PNLI  AND EP.CONO = CTE.CONO  AND EP.DIVI = CTE.DIVI WHERE F2.CONO = '100'  AND F2.SUNO = '6319'  AND F2.PUNO = '5330001073'  AND F2.ITNO = 'P000003-0001S'  AND CTE.AIT6 lt;gt; '' ORDER BY F2.PUNO, F2.PNLI, F2.PNLS  

Ответ №1:

Ваш case производит нули:

 SELECT ... CASE WHEN IV.CEID = 'DUTY' AND IV.CEVA gt; '0' THEN IV.CEVA ELSE 0 END AS DUTY_COST, ... WHERE ...  

Если вам не нужны эти строки, переместите это условие в where предложение:

 SELECT ... IV.CEVA AS DUTY_COST, ... WHERE ... AND IV.CEID = 'DUTY' AND IV.CEVA gt; '0'  

Комментарии:

1. это не сработает, потому что, согласно моему запросу, столбец IV. CEID содержит несколько значений, которые я хочу разделить данные на отдельные столбцы, используя несколько операторов case when, КОГДА IV.CEID = «ОБЯЗАННОСТЬ» И IV.CEVA gt; «0», ЗАТЕМ IV.CEVA ЕЩЕ 0 ЗАКАНЧИВАЕТСЯ КАК DUTY_COST, —СЛУЧАЙ, КОГДА IV.CEID = «ОБЯЗАННОСТЬ/КГ», ЗАТЕМ IV.CEVA ЕЩЕ 0 ЗАКАНЧИВАЕТСЯ КАК DUTY_KG_COST, —СЛУЧАЙ, КОГДА IV.CEID = «FRTIN», ЗАТЕМ IV.CEVA ЕЩЕ 0 ЗАКАНЧИВАЕТСЯ КАК FREIGHT_COST, —СЛУЧАЙ, КОГДА IV.CEID = «BRKG», ЗАТЕМ IV.CEVA ELSE 0 ЗАКАНЧИВАЕТСЯ КАК BROKERAGE_COST, —СЛУЧАЙ, КОГДА IV.CEID = «ОБЯЗАННОСТЬ», ТОГДА IV.WSOP ELSE 0 ЗАКАНЧИВАЕТСЯ КАК DUTY_RATE,

2. я добавил ожидаемый вывод для всех столбцов, которые я ожидал бы увидеть в одной строке, используя Случай, когда для столбца IV.CEID

3. Несколько подзапросов дают мне желаемый результат, но я чувствую, что это сильно повлияет на производительность, чем больше станет набор данных.

Ответ №2:

В итоге я использовал несколько подзапросов, которые предоставили результаты, которые мне были нужны