Welcome to Sign in | Help
in Search

problema select

Last post 05-16-2008, 7:52 AM by Abadon83. 5 replies.
Sort Posts: Previous Next
  •  05-15-2008, 1:01 PM 4941

    problema select




    partener


    tip data



    nr_doc














    nr_f








    debit credit



    10


    FAV 2008-05-05 00:00:00.000



    37














    37








    41.65 0.00



    10


    CHI 2008-05-14 12:31:40.000



    2














    37








    0.00 20.00
    asta e rezultatuldin query
    vreau sa fac un select ce sa -mi totalize la fiecare factura totalul chitantelor
    adica pt ex de sus sa am asa
    partener   tip      nr_doc  debit    credit
    10            FAV     37       41.65   20.00
  •  05-15-2008, 1:24 PM 4942 in reply to 4941

    Re: problema select

    O posibilă soluţie propusă în condiţiile în care nu ai oferit suficiente informaţii:
    SELECT F.*, F.debit, C.credit2
    FROM
    (
    SELECT partener, tip, nr_doc, debit, nr_f
    FROM tabela
    WHERE tip = 'FAV'
    ) AS F

    INNER JOIN
    (
    SELECT nr_f, SUM(credt) as credit2
    FROM tabela
    WHERE tip = 'CHIT'
    GORUP BY nr_f
    ) AS C

    ON F.nr_f = C.nr_f

  •  05-15-2008, 1:40 PM 4944 in reply to 4942

    Re: problema select

    queryul de sus e ce rezulta dintr-un select carea fiseaza toate facturile neincasate
    e un rezulat simplist
    pt ca pot fii situatii in care o factura sa nu aiba nici o chitanta,sau sa aiba o chitanta ca cea de sus partiala,sau mai multe chitante a caror suma sa nu acopere valoarea facturii
  •  05-15-2008, 2:09 PM 4947 in reply to 4944

    Re: problema select

    Abadon83:
    queryul de sus e ce rezulta dintr-un select carea fiseaza toate facturile neincasate
    e un rezulat simplist
    pt ca pot fii situatii in care o factura sa nu aiba nici o chitanta,sau sa aiba o chitanta ca cea de sus partiala,sau mai multe chitante a caror suma sa nu acopere valoarea facturii

    Nu poţi avea pretenţii în condiţile în care - aşa cum am scris şi mai sus - informaţiile oferite sunt puţine.

    Soluţia în acest caz este să utilizezi un OUTER JOIN.

    Cel mai bine ar fi sa prezinti structura tabelelor şi apoi poate va veni si o solutie ...
    Altfel, e pierdere de timp !
  •  05-15-2008, 10:32 PM 4960 in reply to 4941

    Re: problema select

    plecand pe ideea ca datele care le-ai pus acolo sunt intr-un tabel pe care tb sa faci query-ul eu zic ca ar trebui sa obti exact ceea ce vrei cu un group by pe numarul facturii si sum(debit), sum(credit) dar fara sa mai afiseti tip, data si nr_doc (eventual sa le iei tot cu functii agregate si alea).

    PS: anyway, daca raspunsurile care le-ai primit nu rezolva problema atunci e nevoie sa fi un pic mai explicit. Wink
  •  05-16-2008, 7:52 AM 4966 in reply to 4960

    Re: problema select

    am rezolvat

    asa arata:
    IF OBJECT_ID ( 'tempdb..#tempdoc', 'u' ) IS NOT NULL
    DROP TABLE #tempdoc
    SELECT  partener.den_parten,docum.part_crean ,docum.tip_docum,  docum.data,  docum.nr_inreg, docum.numar,
        CASE WHEN tip.inreg_cre = 1 THEN docum.suma_doc ELSE 0.00 END AS debit,
        CASE WHEN tip.achit_cre = 1 THEN docum.suma_doc ELSE 0.00 END AS credit
    into #tempdoc
        FROM gest_docum docum
            LEFT JOIN gene_partener partener
                ON docum.part_crean = partener.cod_parten
            LEFT JOIN gest_tipdocu tip
                ON tip.tip_docum collate SQL_Latin1_General_CP1_CS_AS = docum.tip_docum collate SQL_Latin1_General_CP1_CS_AS
            LEFT JOIN (
                SELECT
                    facturi.numar,
                    facturi.part_crean,
                    SUM(CASE WHEN tipdocu.inreg_cre = 1 THEN facturi.suma_doc ELSE 0.00 END),
                    SUM(CASE WHEN tipdocu.achit_cre = 1 THEN facturi.suma_doc ELSE 0.00 END)
                FROM  gest_docum facturi
                LEFT JOIN gest_tipdocu tipdocu ON  tipdocu.tip_docum collate SQL_Latin1_General_CP1_CS_AS = facturi.tip_docum collate SQL_Latin1_General_CP1_CS_AS
                GROUP BY facturi.numar, facturi.part_crean
                ) 
                AS rulaje (numar, cod_parten, facturat, incasat)
                ON rulaje.numar = docum.numar AND rulaje.cod_parten = docum.part_crean 
    WHERE  (rulaje.facturat != rulaje.incasat) AND (tip.inreg_cre = 1 OR tip.achit_cre = 1)



    SELECT F.*, F.debit, coalesce(C.credit2,0)as credit
    FROM
    (
    SELECT den_parten as creanta,data,part_crean as idparten,tip_docum, nr_inreg, debit, numar
    FROM #tempdoc
    WHERE tip_docum = 'FAV'
    ) AS F
    LEFT JOIN
    (
    SELECT numar, coalesce(SUM(credit),0) as credit2
    FROM #tempdoc
    WHERE tip_docum = 'CHI'
    GROUP BY numar
    ) AS C
    ON F.numar = C.numar
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems