具有多个表连接的SQL查询计数和求和问题

时间:2011-10-20 20:55:12

标签: sql multiple-tables

有2张桌子。 1 tblBidder和1 tblItem。它们共享1个字段,用于在每个表中的字段之间建立关联。它是bidder_number(对于tblBidder)和item_bidder_number(对于tblItem)。然后,它们具有bidder_sale_id(对于tblBidder)和item_sale_id(对于tblItem)的对应字段。此字段用于在一次会议期间全部售出的一组物品。因此,您可以单独销售20种不同的商品,但它们都具有相同的销售ID,因为它们是在同一天销售的。

我试图提取每个投标人类型的投标人总数的报告,这些投标人已经注册参与拍卖235,并且还要知道该特定组的拍卖总额是多少。以下是我对SQL查询的看法:

SELECT     COUNT(dbo.tblBidder.bidder_type) AS TotalRegistrants, SUM(dbo.tblItem.item_premium + dbo.tblItem.item_pr) AS SumTotal, 
                  dbo.tblBidder.bidder_type
FROM         dbo.tblItem INNER JOIN
                  dbo.tblBidder ON dbo.tblItem.item_bidder_number = dbo.tblBidder.bidder_number     AND dbo.tblItem.item_sale_id = dbo.tblBidder.bidder_sale_id
WHERE     (dbo.tblItem.item_sale_id IN (235))
GROUP BY dbo.tblBidder.bidder_type

该查询返回了不正确数量的注册人,但正确总和:

TotalRegistrants        SumTotal            bidder_type

10          3760.0000       Absentee Bidder
133         173870.6250     Floor Bidder
77          81300.0000      Internet Bidder
29          34862.2500      Mail Bidder
100         242790.2500     Phone Bidder

这只是为了获得注册人的总数:

SELECT     COUNT(bidder_type) AS TotalBidders, bidder_type
FROM         dbo.tblBidder
WHERE     (bidder_sale_id = 235)
GROUP BY bidder_type

在以下位置正确返回:

TotalBidders    bidder_type

41      Absentee Bidder
79      Floor Bidder
60      Internet Bidder
35      Mail Bidder
82      Phone Bidder

如果我尝试将items表连接到最后一个查询,即使我没有选择任何新列,TotalBidders也会返回数千个数字。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果你试试这个怎么办?:

SELECT  COUNT(DISTINCT dbo.tblBidder.bidder_id) AS TotalRegistrants, 
        SUM(dbo.tblItem.item_premium + dbo.tblItem.item_pr) AS SumTotal,
        dbo.tblBidder.bidder_type 
FROM dbo.tblBidder 
LEFT JOIN dbo.tblItem 
ON dbo.tblItem.item_bidder_number = dbo.tblBidder.bidder_number
AND dbo.tblItem.item_sale_id = dbo.tblBidder.bidder_sale_id 
WHERE (dbo.tblBidder.bidder_sale_id  = 235) 
GROUP BY dbo.tblBidder.bidder_type