我正在尝试在 CR 中制作一份报告,该报告将取决于从外部软件下载的动态参数。 选择部分似乎有问题。
SELECT
trn_exponorm,
trn_frmnumer,
k1.Knt_Akronim AS 'Akronim kontrahenta',
k1.Knt_Nazwa1 AS 'Nazwa kontrahenta',
TRN_DOKUMENTOBCY AS 'NUMER FAKTURY',
SUM(TrE_KsiegowaNetto) as 'Sprzedaż netto PLN',
sum(TrE_KosztKsiegowy) as 'Koszt Ksiegowy',
SUM(tre_ksiegowanetto)-sum(TrE_KosztKsiegowy) AS 'Marża',
CASE WHEN sum(TrE_KosztKsiegowy) < SUM(tre_ksiegowanetto) THEN
str((round( (sum(tre_ksiegowanetto)-SUM(tre_kosztksiegowy))/SUM(tre_ksiegowanetto),2)*100), 3,0) + ' %'
ELSE '' END AS 'Marża %',
case when k1.Knt_AkwTyp = 944 then (select concat(Prc_Nazwisko, ' ', Prc_Imie1) from cdn.PrcKarty where Prc_GIDNumer = k1.Knt_AkwNumer)
when k1.Knt_AkwTyp = 32 then k2.Knt_Akronim
else '' end as Akwizytor,
concat(p2.Prc_Nazwisko, ' ', p2.Prc_Imie1) as Opiekun
--sum(TrE_KosztKsiegowy) as KosztKsiegowy,
-- TrE_KsiegowaNetto as 'Sprzedaż netto PLN',
-- TrE_KosztKsiegowy as KosztKsiegowy,
-- tre_ksiegowanetto-TrE_KosztKsiegowy AS 'Marża',
-- CASE WHEN TrE_KosztKsiegowy < tre_ksiegowanetto THEN
-- str((round( (tre_ksiegowanetto-tre_kosztksiegowy)/tre_ksiegowanetto,2)*100), 3,0) + ' %'
-- ELSE '' END AS 'Marża %',
FROM cdn.tranag
JOIN cdn.KntKarty k1 on k1.Knt_GIDNumer=TrN_KntNumer
left join cdn.TraElem on TrN_GIDTyp=TrE_GIDTyp AND TrN_GIDNumer=TrE_GIDNumer
left JOIN cdn.TwrKarty ON Twr_GIDNumer=TrE_TwrNumer
left JOIN cdn.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer
left JOIN cdn.KntKarty k2 on k2.Knt_GIDTyp=k1.Knt_AkwTyp and k2.Knt_GIDNumer=k1.Knt_AkwNumer
left join cdn.PrcKarty p1 on p1.Prc_GIDTyp=k1.Knt_AkwTyp and p1.Prc_GIDNumer=k1.Knt_AkwNumer
left join cdn.KntOpiekun on KtO_KntNumer=k1.Knt_GIDNumer and KtO_KntTyp=k1.Knt_GIDTyp
left join cdn.PrcKarty p2 on p2.Prc_GIDNumer=KtO_PrcNumer
WHERE
(({?okres} = 1 and TrN_TrNRok= {?rok})
or ({?okres} = 2 and TrN_TrNRok = {?rok}
and (( {?kwartal}= 1 and TrN_TrNMiesiac in (1, 2, 3))
or ({?kwartal} = 2 and TrN_TrNMiesiac in (4, 5, 6))
or ({?kwartal} = 3 and TrN_TrNMiesiac in (7, 8, 9))
or ({?kwartal} = 4 and TrN_TrNMiesiac in (10, 11, 12))))
or ({?okres} = 3 and TrN_TrNRok = {?rok} and TrN_TrNMiesiac = {?miesiac})
or ({?okres} = 4 and TrN_Data2 BETWEEN {?dataOD} AND {?dataDO})) and
TrN_SpiTyp <> 0 and
TrN_Stan >= 3 and
TrN_Aktywny = 0 and
TrN_TrNTyp NOT in (12, 13) and
TrN_GIDTyp in (2033, 2037, 2041, 2045) and
TraNag.TrN_TrNLp = 127
AND
({?wgAkwizytora} = 0 or ({?wgAkwizytora} =1 and (({?akwTyp} = 1 and k1.Knt_GIDNumer in (SELECT Knt_GIDNumer FROM cdn.KntKarty WHERE Knt_AkwNumer={?akwizytorPrac} and Knt_AkwTyp = 944))
or ({?akwTyp} = 2 and k1.Knt_GIDNumer in (SELECT Knt_GIDNumer FROM cdn.KntKarty WHERE Knt_AkwNumer={?akwizytorKnt} and Knt_AkwTyp = 32)))))
AND
(choose ({?Drzwi}=0,' and 1=1 ', ' and n1.TrN_GIDNumer IN (SELECT distinct n3.TrN_GIDNumer from CDN.TraNag n3 left join cdn.TraSElem on TrS_GIDTyp=n1.TrN_GIDTyp and TrS_GIDNumer=n1.TrN_GIDNumer
left join cdn.Dostawy on Dst_GIDTyp=TrS_DstTyp and Dst_GIDNumer=TrS_DstNumer and Dst_GIDLp=TrS_DstLp
left join cdn.TraNag n2 on n2.TrN_GIDTyp=Dst_TrnTyp and n2.TrN_GIDNumer=Dst_TrnNumer WHERE n2.TrN_TrNSeria = ''PWD'' ) ') }
{choose ({?Okna=0}, ' and 1=1', ' and n1.TrN_GIDNumer IN (SELECT distinct n3.TrN_GIDNumer from CDN.TraNag n3 left join cdn.TraSElem on TrS_GIDTyp=n1.TrN_GIDTyp and TrS_GIDNumer=n1.TrN_GIDNumer
left join cdn.Dostawy on Dst_GIDTyp=TrS_DstTyp and Dst_GIDNumer=TrS_DstNumer and Dst_GIDLp=TrS_DstLp
left join cdn.TraNag n2 on n2.TrN_GIDTyp=Dst_TrnTyp and n2.TrN_GIDNumer=Dst_TrnNumer WHERE n2.TrN_TrNSeria = ''PBO'' ) ') )
(choose ({?Uslugi=0}, ' and 1=1', ' AND n1.TrN_GidNUmer IN (SELECT TrN_GIDNumer FROM CDN.TraNag
WHERE (
EXISTS (SELECT DISTINCT e2.Tre_GidNUmer from CDN.TraElem e2 WHERE e2.TrE_GidNumer = n1.Trn_GidNUmer and e2.TrE_TypTwr =4)
)
AND NOT EXISTS (
SELECT distinct n3.TRN_GIDNUMER FROM CDN.tranag n3 left join cdn.TraSElem ON TrS_GIDTyp=n1.TrN_GIDTyp and TrS_GIDNumer=n1.TrN_GIDNumer
left join cdn.Dostawy on Dst_GIDTyp=TrS_DstTyp AND Dst_GIDNumer=TrS_DstNumer and Dst_GIDLp=TrS_DstLp
left join cdn.TraNag n2 on n2.TrN_GIDTyp=Dst_TrnTyp and n2.TrN_GIDNumer=Dst_TrnNumer
WHERE n2.TrN_TrNSeria = ''PWD'' OR n2.TrN_TrNSeria = ''PBO'' )) ') )
(choose ({?Towar}=0, ' and 1=1', ' AND n1.TrN_GidNUmer IN (SELECT TrN_GIDNumer FROM CDN.TraNag
WHERE (
EXISTS (SELECT DISTINCT e2.Tre_GidNUmer from CDN.TraElem e2 WHERE e2.TrE_GidNumer = n1.Trn_GidNUmer and e2.TrE_TypTwr IN (1,2))
AND NOT EXISTS (SELECT DISTINCT e3.Tre_GidNUmer from CDN.TraElem e3 WHERE e3.TrE_GidNumer = n1.Trn_GidNUmer and e3.TrE_TypTwr =4)
)
AND NOT EXISTS (
SELECT distinct n3.TRN_GIDNUMER FROM CDN.tranag n3 left join cdn.TraSElem ON TrS_GIDTyp=n1.TrN_GIDTyp and TrS_GIDNumer=n1.TrN_GIDNumer
left join cdn.Dostawy on Dst_GIDTyp=TrS_DstTyp AND Dst_GIDNumer=TrS_DstNumer and Dst_GIDLp=TrS_DstLp
left join cdn.TraNag n2 on n2.TrN_GIDTyp=Dst_TrnTyp and n2.TrN_GIDNumer=Dst_TrnNumer
WHERE n2.TrN_TrNSeria = ''PWD'' OR n2.TrN_TrNSeria = ''PBO'' )) ') )
group by
k1.knt_akronim, k1.Knt_Nazwa1, k1.Knt_AkwTyp, k1.Knt_AkwNumer, k2.Knt_Akronim, p1.Prc_Nazwisko, p1.Prc_Imie1, p2.Prc_Nazwisko, p2.Prc_Imie1,TRN_DOKUMENTOBCY,trn_exponorm,
trn_frmnumer
我不知道如何替换子句中的 WHERE CHOOSE,以便我可以从 4 个变体中进行选择。
我试过 CASE 但效果不是很好。