TSQL присоединяется к другой таблице с помощью Group By

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