2016-03-17 3 views
-1

Вот мой SQL запросSQL запросов: Обновление от выбора результата

UPDATE dbo.TD_TOTAL_ACCOUNTS SET Total_Accounts = Total 
SELECT annee, mois,[Group], 
(
SELECT SUM(Accounts_Number) 
FROM olap.TD_ALL_ACCOUNTS 
WHERE EOMONTH(cast(cast(mois as nvarchar(2))+ '/' + '01' + '/' + cast(annee as nvarchar(4)) as DATETIME)) <= EOMONTH(cast(cast(T2.mois as nvarchar(2))+ '/' + '01' + '/' + cast(T2.annee as nvarchar(4)) as DATETIME)) AND [Group] = T2.[Group] 
) AS Total 
FROM olap.TD_ALL_ACCOUNTS AS T2 

В колонке «Всего» не признается. Я не могу назвать таблицу, полученную в результате выбора T3, и использовать ее в SET «Total_Accounts = T3.Total»

Спасибо заранее.

+0

'SET DATEFORMAT dmy' и ваш код может завершиться неудачно/произвести неправильные результаты. Я категорически не рекомендую создавать DATE. Подумайте об использовании 'DATEFROMPARTS'. – lad2025

+0

lad2025 не могли бы вы объяснить больше? – yasmine92

+0

** [DEMO] (https://data.stackexchange.com/stackoverflow/query/451877?opt.textResults=true) ** Пожалуйста, проверьте, как ведет себя конкатенированное 'DATE' – lad2025

ответ

1

Что-то вроде этого должно сделать трюк (изменить IdColumn на идентификатор строки), хотя я настоятельно призываю вас принять во внимание комментарии Lad2025.

UPDATE t 
SET Total_Accounts = Total 
FROM dbo.TD_TOTAL_ACCOUNTS t 
INNER JOIN 
(
SELECT IdColumn, annee, mois,[Group], 
(
SELECT SUM(Accounts_Number) 
FROM olap.TD_ALL_ACCOUNTS 
WHERE EOMONTH(cast(cast(mois as nvarchar(2))+ '/' + '01' + '/' + cast(annee as nvarchar(4)) as DATETIME)) <= EOMONTH(cast(cast(T2.mois as nvarchar(2))+ '/' + '01' + '/' + cast(T2.annee as nvarchar(4)) as DATETIME)) AND [Group] = T2.[Group] 
) AS Total 
FROM olap.TD_ALL_ACCOUNTS AS T2 
) T3 ON(t.IdColumn = T3.IdColumn) 
+0

Это работает отлично! Большое спасибо – yasmine92

+0

рад помочь :-) –

Смежные вопросы