有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也会返回数千个数字。任何帮助将不胜感激。
答案 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