Welcome to Sign in | Help
in Search

Problema select din 2 tabele

Last post 02-11-2009, 12:44 PM by B_gd_n[ ]Sahlean. 1 replies.
Sort Posts: Previous Next
  •  02-11-2009, 11:42 AM 6756

    Problema select din 2 tabele

    Am 2 tabele Debit si Credit identice cu urmatoarea structura : cont, fel_valuta, suma, lei
    Trebuie sa le unesc intr-un singur tabel de forma: cont, debit_usd, credit_usd, debit_euro, credit_euro, ... unde debit_usd trebuie sa fie coloana suma din tabela Debit unde fel_valuta este USD, credit_usd = suma din tabela credit unde fel_valuta este USD si asa mai departe ptr. EUR.
    Tabelele nu au acelasi nr de conturi (unele pot sa existe doar in Credit si/sau Debit).
    Tabela rezultata trebuie sa aiba toate conturle din ambele tabele dar o singura data.
    Se poate ?



    Sorin Sandu
  •  02-11-2009, 12:44 PM 6757 in reply to 6756

    Re: Problema select din 2 tabele

    Foloseşte interogarea următoare (nu am verificat-o pt. că nu am acces la un server SQL acuma) pentru a determina pentru fiecare cont totalul de pe debit si de pe credit:

    SELECT
    CASE WHEN D.cont IS NULL THEN C.cont ELSE D.cont END AS cont2,
    ISNULL(D.Total,0) AS TotalD,
    ISNULL(C.Total,0) AS TotalC
    FROM
    (
    SELECT cont, fel_valuta, SUM(Suma) AS Total
    FROM Debit
    GROUP BY cont, fel_valuta
    ) AS D
    FULL OUTER JOIN
    (
    SELECT cont, fel_valuta, SUM(Suma) AS Total
    FROM Credit
    GROUP BY cont, fel_valuta
    ) AS C
    ON D.cont = C.cont

    Interogarea poti sa o folosesti ca sursa de date pentru un raport in Crystal Reports (de exemplu) unde creezi un cross-tab sau un pivot-tabel în Excel (tabel pivot).

    Cert este faptul ca acea clauza PIVOT introdusa in SQL Server 2005 nu permite decât tabele pivot care au un număr predefinit de coloane. Deci dacă numărul de valute este limitat atunci poţi folosi în continuarea interogării de mai sus clauza PIVOT dacă nu aplici recomandarea de mai sus.

     

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems