如何在 Crystal Reports 中选择?

问题描述 投票:0回答:0

我正在尝试在 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 但效果不是很好。

tsql crystal-reports
© www.soinside.com 2019 - 2024. All rights reserved.