#sql #multiple-tables
#sql #несколько таблиц
Вопрос:
Есть 2 таблицы. 1 tblBidder и 1 tblItem. Они используют 1 поле, которое устанавливает связь между полями в каждой таблице. Это bidder_number (для tblBidder) и item_bidder_number (для tblItem). Затем у них есть соответствующие поля bidder_sale_id (для tblBidder) и item_sale_id (для tblItem). Это поле предназначено для группы товаров, которые продаются в течение одного сеанса. Таким образом, у вас может быть 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
Если я попытаюсь присоединить таблицу items к этому последнему запросу, даже если я не выберу никаких новых столбцов, TotalBidders вернет числа в тысячах. Любая помощь была бы высоко оценена.
Ответ №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
Комментарии:
1. По-прежнему правильная цена, но неправильное количество и отличается от того, что я уже получаю и каким оно должно быть.
2. @James — Ты можешь попробовать сейчас?. И скажите мне, являются ли результаты подсчета больше или меньше. Спасибо
3. Количество для всех них равно 1.
4. @James — Да, столбец в
COUNT(DISTINCT
должен был быть ключом таблицыdbo.tblBidder
, я изменил сейчас (но я не уверен, правильный ли это столбец, поэтому вам следует изменить его на первичный ключ таблицы участников торгов)