SQL-запрос с несколькими таблицами объединений - PullRequest
1 голос
/ 21 октября 2011

Есть 2 таблицы. 1 tblBidder и 1 tblItem. Они разделяют 1 поле, которое устанавливает связь между полями в каждой таблице. Это bidder_number (для tblBidder) и item_bidder_number (для tblItem). Затем у них есть соответствующее поле bidder_sale_id (для tblBidder) и item_sale_id (для tblItem). Это поле предназначено для группы товаров, которые продаются за 1 заседание. Таким образом, у вас может быть 20 различных предметов, продаваемых по отдельности, но все они имеют одинаковый идентификатор продажи, потому что они продаются в один и тот же день.

Я пытаюсь получить отчет об общем количестве претендентов по типу претендента, которые были зарегистрированы на аукционе 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

Если я попытаюсь присоединить таблицу элементов к этому последнему запросу, даже если я не выберу новые столбцы, TotalBidders вернет числа в тысячах. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 21 октября 2011

Что если вы попробуете это?:

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 
...