#tsql #join #group-by
#tsql #Присоединиться #групповое
Вопрос:
Псевдокод того, что у меня сейчас есть, таков
Стоимость налоговая стоимость = Фактическая стоимость
Однако мне нужно, чтобы это было:
Стоимость налог — итоговая сумма скидок = Фактическая стоимость
У меня есть оператор SQL Select при объединении 3 таблиц, который вычисляет стоимость налог = фактическая стоимость.
SELECT dbo.XMP_EventUsers.ID, dbo.XMP_EventUsers.EventID, dbo.XMP_EventUsers.UserID,
CONVERT(VARCHAR(20),dbo.XMP_EventUsers.DateCreated, 100)
AS DateCreated, CONVERT(VARCHAR, dbo.XMP_Event.Cost, 1) AS Cost, dbo.Users.FirstName, dbo.Users.LastName,
dbo.XMP_Event.Cost dbo.XMP_Event.CostTax - dbo.XMP_EventUsers.Paid AS Outstanding,
dbo.XMP_Event.Cost dbo.XMP_Event.CostTax AS CostActual
FROM dbo.XMP_Event INNER JOIN
dbo.XMP_EventUsers ON dbo.XMP_Event.ID = dbo.XMP_EventUsers.EventID INNER JOIN
dbo.Users ON dbo.XMP_EventUsers.UserID = dbo.Users.UserID
В другой таблице записываются скидки, которые будут применены к общей стоимости. Этот запрос суммирует применяемые скидки.
SELECT UserID, SUM([Amount]) AS Amount
FROM [dbo].[XMP_EventPromoUsers]
GROUP BY UserID
Как мне присоединить 2-й результат к первому, чтобы общее количество скидок было вычтено из конечной стоимости в инструкции select для каждой записи?
Спасибо за вашу помощь!
-R
Пример результатов ниже для ответа 1
Запрос 1 возвращает:
ID|EventID|UserID|DateCreated|Cost|FirstName|LastName|Outstanding|CostActual|FinalValue|
51|14-----|41----|Aug 11 2011|0.00|John-----|Smith---|-120-------|0.00------|-10-------|
Запрос 2
UserID-|Amount----|
41-----|10--------|
96-----|30--------|
Ответ №1:
SELECT
dbo.XMP_EventUsers.ID, dbo.XMP_EventUsers.EventID, dbo.XMP_EventUsers.UserID,
CONVERT(VARCHAR(20),dbo.XMP_EventUsers.DateCreated, 100) AS DateCreated,
CONVERT(VARCHAR, dbo.XMP_Event.Cost, 1) AS Cost,
dbo.Users.FirstName, dbo.Users.LastName,
dbo.XMP_Event.Cost dbo.XMP_Event.CostTax - dbo.XMP_EventUsers.Paid AS Outstanding,
dbo.XMP_Event.Cost dbo.XMP_Event.CostTax AS CostActual,
dbo.XMP_Event.cost dbo.XMP_Event.CostTax - Users2.Amount AS FinalValue
FROM
dbo.XMP_Event
INNER JOIN dbo.XMP_EventUsers
ON dbo.XMP_Event.ID = dbo.XMP_EventUsers.EventID
INNER JOIN dbo.Users
ON dbo.XMP_EventUsers.UserID = dbo.Users.UserID
INNER JOIN (SELECT UserID, SUM([Amount]) AS Amount
FROM [dbo].[XMP_EventPromoUsers]
GROUP BY UserID) Users2
ON dbo.Users.UserID = Users2.UserID
Комментарии:
1. Спасибо, однако 2-й запрос возвращает 2 результата сам по себе, но ваш запрос возвращает только одну запись? Есть идеи?
2. Пожалуйста, покажите две записи, возвращенные вашим запросом, и одну, возвращенную моим.
3. Я только что опубликовал результаты в разделе вопросов в качестве редактирования. Кстати, да, цена товара равна 0, со скидкой 10. Это не проблема.
4. Hm результат для запроса 2 показывает только 2 поля, в моем запросе их гораздо больше. Но в двух словах, мой запрос должен возвращать запись для каждой комбинации user, event, eventuser и eventpromousers. Похоже, что есть две записи, которые соответствуют идентификаторам пользователя 41 и 96 в этом случае. Итак, чтобы уточнить, какие записи возвращаются вашим вторым запросом, который возвращает Sum([Сумма])?
5. «какие записи возвращаются вашим вторым запросом, который возвращает Sum([Сумма])?» да, правильно. два результата. Идентификатор пользователя 41 и 96.