0

首先非常感谢所有的回复和评论。我想列出 4 个表中的一些字段。我的问题是 ODEMELER(Customer Payments) 表是否没有 BORCLAR(Customers Debt) 表值。即;

MusteriID = 1。

该客户购买了一件商品。我将此过程插入到 BORCLAR 表(BorcMusteriID=1),但该客户的 ODEMELE 表为空且 OdemeMusteriID=!!!(null) 因为客户不付款。我想用这段代码列出所有客户的所有债务;

(SELECT SUM(BORCLAR.BorcTutari) FROM BORCLAR WHERE BORCLAR.BorcMusteriID=
    ODEMELER.OdemeMusteriID)-
    (SELECT SUM(ODEMELER.OdemeTutar) FROM ODEMELER where BORCLAR.BorcMusteriID=
    ODEMELER.OdemeMusteriID))
    AS [Borç Toplamı] FROM BORCLAR)

但是这个代码是回复我只有 BorcMusteriID,OdemeMusteriID 有效记录然后我的很多客户购买物品但现在不付款。我不列出这个。我尝试了这段代码,但它是错误的;

    ((SELECT SUM(BORCLAR.BorcTutari) FROM BORCLAR WHERE
 BORCLAR.BorcMusteriID=ODEMELER.OdemeMusteriID)-
(SELECT SUM(ODEMELER.OdemeTutar) FROM ODEMELER where 
BORCLAR.BorcMusteriID=
CASE (SELECT COUNT(*) FROM ODEMELER WHERE 
ODEMELER.OdemeMusteriID=BORCLAR.BorcMusteriID)
        WHEN 0 THEN ODEMELER.OdemeMusteriID  = ODEMELER.OdemeMusteriID
       ELSE ODEMELER.OdemeMusteriID=0 END)) AS [Borç Toplamı] FROM BORCLAR

完成我的代码;

  set dateformat dmy
    SELECT
    (SELECT TOP 1 BORCLAR.BorcTarih FROM BORCLAR WHERE BORCLAR.BorcTarih <= 
    CONVERT(DATETIME, GETDATE(), 104)

    and

    BORCLAR.BorcMusteriID=MUSTERILER.MusteriID order by BORCLAR.BorcTarih desc)
     as [TARİH], 

    MUSTERILER.Unvan,MUSTERILER.Ad + ' ' + MUSTERILER.Soyad AS [Adı Soyadı],
    MUSTERILER.Mahalle + 
    ' ' + MUSTERILER.Cadde + ' '+MUSTERILER.Sokak + ' ' + MUSTERILER.ApartmanAdi+ 
    ' NO:' +
    MUSTERILER.Numara + ' KAT:' + MUSTERILER.Kat + ' DAİRE:'+
    MUSTERILER.Daire  AS [Adres],
    ARACSUBETANIMLAR.AracSubeAdi as [Araç/Şube Adı], 

    ((SELECT SUM(BORCLAR.BorcTutari) FROM BORCLAR WHERE BORCLAR.BorcMusteriID=
    ODEMELER.OdemeMusteriID)-
    (SELECT SUM(ODEMELER.OdemeTutar) FROM ODEMELER where BORCLAR.BorcMusteriID=
    ODEMELER.OdemeMusteriID))
    AS [Borç Toplamı] FROM BORCLAR

    INNER JOIN ARACSUBETANIMLAR ON BORCLAR.BorcAracSube = ARACSUBETANIMLAR.AracSubeID
    INNER JOIN ODEMELER ON BORCLAR.BorcMusteriID = ODEMELER.OdemeMusteriID
    INNER JOIN MUSTERILER ON BORCLAR.BorcMusteriID = MUSTERILER.MusteriID

    where 
    BORCLAR.BorcAracSube=ARACSUBETANIMLAR.AracSubeID
     and 
    ((SELECT SUM(BORCLAR.BorcTutari) FROM BORCLAR WHERE BORCLAR.BorcMusteriID=
    ODEMELER.OdemeMusteriID)-
    (SELECT SUM(ODEMELER.OdemeTutar) FROM ODEMELER where BORCLAR.BorcMusteriID=
    ODEMELER.OdemeMusteriID)>0)

    group by MUSTERILER.Unvan,MUSTERILER.Soyad,MUSTERILER.Ad,
    ARACSUBETANIMLAR.AracSubeAdi,
    ODEMELER.OdemeMusteriID,BORCLAR.BorcMusteriID,MUSTERILER.
    Cadde,MUSTERILER.Daire,
    MUSTERILER.ApartmanAdi,MUSTERILER.Mahalle,MUSTERILER.Kat,
    MUSTERILER.Numara,MUSTERILER.Sokak,
    MUSTERILER.MusteriID

非常感谢。

4

1 回答 1

0

看起来您想要所有客户余额,无论他们是否支付了任何费用。您在一个表 (BORCLAR) 中有购买,在另一个表 (ODEMELE) 中有付款。我不确定您说的是什么语言,但我猜“MusteriID”是客户 ID。您可以先使用 CTE 获取客户的总购买和付款,然后再加入。像这样的东西:

;WITH BorclarTotal AS (
    SELECT  BORCLAR.BorcMusteriID, SUM(BORCLAR.BorcTutari) AS BorcTutari
    FROM    BORCLAR
    GROUP BY BORCLAR.BorcMusteriID
), OdemelerTotal AS (
    SELECT  ODEMELER.OdemeMusteriID, SUM(ODEMELER.OdemeTutar) AS OdemeTutar
    FROM    ODEMELER
    GROUP BY ODEMELER.OdemeMusteriID
)
SELECT  bt.BorcMusteriID, bt.BorcTutari - ISNULL(ot.OdemeTutar, 0)
FROM    BorclarTotal bt
        LEFT JOIN OdemelerTotal ot ON bt.BorcMusteriID = ot.OdemeMusteriID
WHERE   bt.BorcTutari != ISNULL(ot.OdemeTutar, 0);
于 2013-07-25T15:03:59.613 回答