Внутреннее левое соединение, чтобы получить значение на предыдущую дату
Я пытаюсь получить значение GR2 на предыдущую дату TabDate в следующем запросе:
DECLARE @ShN money=STRLOG.dbo.fn_VarValue('ShN')
DECLARE @ShNs money=STRLOG.dbo.fn_VarValue('ShNs')
DECLARE @ShNN money=STRLOG.dbo.fn_VarValue('ShN') +STRLOG.dbo.fn_VarValue('ShNs')
DECLARE @ShD money=STRLOG.dbo.fn_VarValue('ShD')
SELECT sum(
CASE
WHEN ttab.GR2='33'
THEN
CASE
-- Randam ar sekianti diena sventes
WHEN tholy.[ID] IS NOT NULL
THEN @ShN
ELSE @ShN
END
WHEN ttab.GR2='3'
THEN
CASE
-- Randam ar sekianti diena sventes
WHEN tholy.[ID] IS NOT NULL
THEN @ShNs
-- Randam ar tai pirma 3-cios pamainos diena
WHEN tprev.GR2='3'
THEN @ShNN
ELSE @ShNs
END
ELSE
CASE
-- Randam ar sekianti diena sventes
WHEN tholy.[ID] IS NOT NULL
THEN @ShD-60
ELSE @ShD
END
END
)/60,
ttab.EmplCodeID
FROM tbl_TabelWHrs INNER JOIN tbl_Tabel ttab
ON tbl_TabelWHrs.TabWHrsID = ttab.TabWHrsID
LEFT JOIN tbl_Holidays tholy
ON [HolidayDate]=DATEADD("DAY",1,[TabDate])
LEFT JOIN tbl_Tabel tprev
ON ttab.[EmplCodeID]=tprev.[EmplCodeID]
AND [ttab.TabDate]=DATEADD("DAY",-1,[tprev.TabDate])
WHERE (tbl_TabelWHrs.TabMon='2014.12' AND ttab.EmplCodeID='7040023' AND ttab.GR2 is not null)
GROUP BY ttab.EmplCodeID;
То, что я получаю при исполнении, это 2 ошибки:
Сообщение 207, Уровень 16, Состояние 1, Строка 47 Неверное имя столбца 'ttab.TabDate'. Сообщение 207, уровень 16, состояние 1, строка 47 Неверное имя столбца 'tprev.TabDate'.
Что-то не так с "LEFT JOIN tbl_Tabel tprev". Ошибка возникает в полях в строке "AND [ttab.TabDate] = DATEADD (" DAY ", - 1, [tprev.TabDate])". Что я тут не так делаю?
1 ответ
Решение
Проблема здесь заключается в использовании использовали square bracket
перед псевдонимом и закончил его после имени столбца так [tprev.TabDate]
будет рассматриваться как столбец, имя псевдонима здесь экранируется.
измените условие следующим образом.
.....
LEFT JOIN tbl_Tabel tprev
ON ttab.[EmplCodeID]=tprev.[EmplCodeID]
AND ttab.[TabDate]=DATEADD("DAY",-1,tprev.[TabDate]) -- here
....