У меня проблемы с удалением повторяющихся записей из этого запроса, содержащих несколько ЛЕВЫХ ВНЕШНИХ СОЕДИНЕНИЙ
SELECT s.Category,
SUM(spons.SPONS) AS SPONSOREDAMT,
SUM(priv.PRIV) AS PRIVATEAMT FROM (SELECT ID AS ID,
Name AS Category FROM dbo.ServicesTable) s
LEFT OUTER JOIN (SELECT DISTINCT ( ServiceId ) AS ServiceId,
DateCreated,
SUM(SPONSORAMT) AS SPONS
FROM dbo.SponsorMonthlyBill
GROUP BY ServiceId,
DateCreated) spons
ON ( s.ID = spons.ServiceId )
LEFT OUTER JOIN (SELECT DISTINCT ( ServiceId ) AS ServiceId,
DateCreated,
SUM(PRIVATEAMT) AS PRIV
FROM dbo.PrivateMonthlyBill
GROUP BY ServiceId,
DateCreated) priv
ON ( s.ID = priv.ServiceId )
AND ( MONTH(priv.DateCreated) = MONTH('2011-08-04') )
GROUP BY s.Category,
spons.SPONS,
priv.PRIV
Если я сделаю так, чтобы последняя строка выглядела так:
GROUP BY s.Category
вместо того, что егоТеперь я буду добавлять дубликаты записей.Если есть более двух записей, все 3 или 4 или более добавляются.Итак, как это сделать.
Scorpi0 дал ответ, который сработал, но нуждается в некоторой дополнительной модификации.Это было изменение, которое я сделал к нему:
SELECT s.Name AS Category,
SUM(spons.SPONS) AS SPONSOREDAMT,
SUM(priv.PRIV) AS PRIVATEAMT, SUM(spons.SPONS) + SUM(priv.PRIV) as
TOTAL,spons.DateCreated
FROM dbo.ServicesTable s
LEFT OUTER JOIN (SELECT ServiceId,DateCreated,
SUM(SPONSORAMT) AS SPONS
FROM dbo.SponsorMonthlyBill
GROUP BY ServiceId,DateCreated) spons
ON ( s.ID = spons.ServiceId )
LEFT OUTER JOIN (SELECT distinct ServiceId,
SUM(PRIVATEAMT) AS PRIV
FROM dbo.PrivateMonthlyBill
GROUP BY ServiceId
) priv
ON ( s.ID = priv.ServiceId )
GROUP BY s.Name,spons.DateCreated
Я знаю, что он снова ввел дубликаты, но как удержать DateCreated
вне GROUP BY и по-прежнему обращаться к нему в главном предложении SELECT?Пожалуйста, имейте в виду, что это View и есть некоторые правила, которым он должен следовать.