Welcome to Sign in | Help

Re: Ajutor pt o interogare....

  •  10-23-2007, 11:11 AM

    Re: Ajutor pt o interogare....

    Nu ai prezentat nici structura tabelei PARTENERI, aşa că am presupus:

    CREATE TABLE PARTENERI (
          ID decimal(18,0) IDENTITY PRIMARY KEY,
          NUME nvarchar(50) NOT NULL UNIQUE
    )

    Ar fi fost utile şi nişte date de test (precum şi rezultatul dorit pentru acele date).

    Pentru a fi mai uşor de citit, aş scrie query-ul iniţial astfel:

    SELECT p.NUME, a.ID AS aidi, a.NUMECLIENT, a.NRDOC, a.DATA, a.MONEDA,a.SERIECARD, (
                  SELECT SUM(d.PRET_UNITAR) FROM dbo.DETAIL_FACTURI d WHERE d.ID_FACTURA = a.ID
           ) AS SUMA,
           COALESCE((
                  SELECT SUM(d.PRET_UNITAR) FROM dbo.DETAIL_FACTURI d WHERE d.ID_FACTURA = a.ID
           ) - (
                  SELECT SUM(c.VALOARE) FROM dbo.CHITANTECL c WHERE c.ID_ANTET_FACTURA = a.ID
           ), (
                  SELECT SUM(d.PRET_UNITAR) FROM dbo.DETAIL_FACTURI d WHERE d.ID_FACTURA = a.ID
           )) AS REST
    FROM dbo.ANTET_FACTURI a INNER JOIN dbo.PARTENERI p ON a.ID_PARTENER = p.ID
    ORDER BY a.NRDOC

    Însă putem scrie acelaşi query ceva mai simplu, astfel:

    SELECT p.NUME, a.ID AS aidi, a.NUMECLIENT, a.NRDOC, a.DATA, a.MONEDA,a.SERIECARD, (
                  SELECT SUM(d.PRET_UNITAR) FROM dbo.DETAIL_FACTURI d WHERE d.ID_FACTURA = a.ID
           ) AS SUMA,
           (
                  SELECT SUM(d.PRET_UNITAR) FROM dbo.DETAIL_FACTURI d WHERE d.ID_FACTURA = a.ID
           ) - COALESCE((
                  SELECT SUM(c.VALOARE) FROM dbo.CHITANTECL c WHERE c.ID_ANTET_FACTURA = a.ID
           ), 0) AS REST
    FROM dbo.ANTET_FACTURI a INNER JOIN dbo.PARTENERI p ON a.ID_PARTENER = p.ID
    ORDER BY a.NRDOC

    În privinţa condiţiei respective, la fel ca şi Bogdan, mă întreb: ce vrei să afişezi?
    (a) facturile care au restul de plată mai mare ca zero ?
    sau
    (b) facturile care au suma-rest > 0 ?

    Dacă vrei (b), asta înseamnă suma>rest, adică suma>suma-plăţi, adică suma+plăţi>suma, adică plăţi>0.

    Dar cred că vrei (a), aşa că aş scrie:

    SELECT *, SUMA-PLATI AS REST FROM (
           SELECT p.NUME, a.ID AS aidi, a.NUMECLIENT, a.NRDOC, a.DATA, a.MONEDA,a.SERIECARD, (
                  SELECT SUM(d.PRET_UNITAR) FROM dbo.DETAIL_FACTURI d WHERE d.ID_FACTURA = a.ID
           ) AS SUMA, COALESCE((
                  SELECT SUM(c.VALOARE) FROM dbo.CHITANTECL c WHERE c.ID_ANTET_FACTURA = a.ID
           ), 0) AS PLATI
           FROM dbo.ANTET_FACTURI a INNER JOIN dbo.PARTENERI p ON a.ID_PARTENER = p.ID
    ) X WHERE SUMA-PLATI>0
    ORDER BY NRDOC

    Răzvan
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems