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