Как я могу настроить это левое соединение, чтобы оно не дублировало мои звонки в Таблице 2 или мои продажи в Таблице 3?
При левом присоединении либо к Таблице 2, либо к Таблице 3 возвращаются точные ответы, а левое соединение к обоим в одинаковые запросы дублируются - хотя у меня три звонка и продажи 444 доллара, он возвращает 6 звонков (три записи таблицы 2 x две записи таблицы 3) и продажи 1332 доллара.
Использование SQL Server Studio 17.
CREATE TABLE #Table1 (
CommercialTime datetime,
NextCommercialTime datetime,
Station varchar(4),
Cost int )
INSERT INTO #Table1 (
CommercialTime,
NextCommercialTime,
Station,
Cost )
VALUES
( '2020-04-06 12:01:00.000',
'2020-04-06 12:15:00.000',
'ZZZZ',
'9999' )
CREATE TABLE #Table2 (
CallTime datetime,
Station varchar(4),
CallCount int )
INSERT INTO #Table2 (
CallTime,
Station,
CallCount )
VALUES
( '2020-04-06 12:02:00.000',
'ZZZZ',
'1' ),
( '2020-04-06 12:05:00.000',
'ZZZZ',
'1' ),
( '2020-04-06 12:07:00.000',
'ZZZZ',
'1' )
CREATE TABLE #Table3 (
SaleTime datetime,
Station varchar(4),
SaleAmount int )
INSERT INTO #Table3 (
SaleTime,
Station,
SaleAmount )
VALUES
( '2020-04-06 12:04:00.000',
'ZZZZ',
'123' ),
( '2020-04-06 12:07:00.000',
'ZZZZ',
'321' )
SELECT
one.Station
, SUM(two.Callcount) as Calls
, SUM(three.SaleAmount) as Sales
FROM #Table1 one WITH(NOLOCK)
LEFT JOIN #Table2 two WITH(NOLOCK) ON one.Station = two.Station
AND two.CallTime between one.CommercialTime and one.NextCommercialTime
LEFT JOIN #Table3 three WITH(NOLOCK) ON one.Station = three.Station
AND three.SaleTime between one.CommercialTime and one.NextCommercialTime
GROUP BY one.Station
--Output:
Station Calls Sales
ZZZZ 6 1332