TSQL присоединиться к другой таблице с Group By - PullRequest
1 голос
/ 04 ноября 2011

Псевдокод того, что у меня сейчас есть,

Стоимость + CostTax = CostActual

Однако мне нужно, чтобы оно было:

Стоимость + налог - totalSumDiscounts = CostActual

У меня есть оператор SQL Select в 3 таблицах, который вычисляет стоимость + налог = CostActual.

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-е результаты с первыми, чтобы общее количество скидок было минус от окончательной стоимости в операторе выбора для каждой записи?

Спасибо за вашу помощь!

-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 Ответ

3 голосов
/ 04 ноября 2011
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
...