2013-07-25 66 views
0

首先非常感谢所有回复和评论。我想列出4个表中的一些字段。我的问题是,如果ODEMELER(客户支付)表没有BORCLAR(客户债务)表值。即;Sql Inner Join不要有结果

MusteriID = 1.

此客户购买商品。我将此过程插入BORCLAR表(BorcMusteriID = 1),但ODEMELER表对于此客户为OdemeMusteriID = !!! (空),因为客户不是付款。我想列出所有客户的所有债务这个代码;

(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 

非常感谢。

+0

你可以尝试,通过替换你的INNER JOIN LEFT JOIN?然后,用它检查结果。 –

+0

我替换了LEFT JOIN,但结果没有改变。 – EthemX

回答

0

看起来你想要所有的客户余额,不管他们是否支付了任何费用。您在一张桌子(BORCLAR)和另一张桌子(ODEMELER)中购买了款项。我不确定你在说什么语言,但我猜“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); 
+0

MusteriID = CustomerID,对不起,我忘了写这个。我需要(债务支付)的总和。但是,如果客户不支付任何款项(债务 - ??!?!?!),我的代码运行这个。你的代码正在为ID的工作,然后给我正确的债务ID。即现在;我如何将你的代码集成到我太长的代码中,以及如何获得无偿总债务。 – EthemX

+0

@EthemX没有任何付款的包括在上面的查询中。如果您只*想要那些没有付款的人,那么那些是LEFT JOIN没有匹配的记录,所以在WHERE子句中,使用“WHERE OOTEMUSTIID IS NULL”。在最后的SELECT中,添加“bt.BorcTutari - ISNULL(ot.OdemeTutar,0)”以查看总数(我编辑了我的答案以包括总借记 - 学分)。如果你想要一个简单的方法来集成到你的代码中,只需将上面的代码插入#temp表中,然后在随后的查询中使用它。 –

+0

我尝试整合我的代码,但有错误;消息8120,级别16,状态1,行3 列'BORCLAR.BorcAracSube'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – EthemX