Обновление из CTE не корректно обновляет все строки таблицы. Но обновляет все существующие строки таблицы с значениями CTE, возвращаемыми в первом идентификаторе в наборе результатов CTE
Я создал CTE и хочу обновить существующую физическую таблицу на основе результатов CTE.
;WITH CTE AS ( Select t.ID As [CTE_ID] ,count(distinct case when e.Department='M' then t.ID else null end) as M_Marketing ,count(distinct case when e.Department='S' then t.ID else null end) as S_Sales ,count(distinct case when e.Department='U' then t.ID else null end) as U_Utilization ,count(distinct case when e.Department=' ' then t.ID else null end) as No_NoDepartment From dbo.Table t (nolock) Left Join dbo.ClearedEmployee ce (nolock) ON t.ID = ce.building_fk Join dbo.Employee e (nolock) ON ce.employee_fk = e.employee_pk Group By t.ID ) Select *, t.ID From CTE c (nolock) FULL JOIN dbo.Table t (nolock) ON t.ID=c.[CTE_ID] Order By t.ID ASC;
Я хочу обновить существующую таблицу с результатами, созданными КОДОМ ВЫШЕ для каждого идентификатора в CTE. Я использую следующий код:
UPDATE dbo.Table t SET Marketing=M_Marketing, Sales=S_Sales, Utilization=U_Utilization, NoDepartment=No_NoDepartment FROM CTE
Но этот код обновляет все строки (все строки с уникальными идентификаторами) столбцов «Маркетинг», «Продажи», «Утилизация» и «Нетдиаферов» со значениями, которые присутствуют в первой строке набора результатов CTE. В основном я не могу использовать CTE true result set для обновления таблицы.
- Копирование значений из другой строки
- Обновить таблицу из другой таблицы в SQL дает неожиданный результат
- используя CASE для выбора столбца для SET в инструкции UPDATE В SQL SERVER
- SQL Заполнение пустых данных на основе предыдущих строк
- Заявление об обновлении TSQL MS SQL Server 2008 R2
- Обновить столбец из другого столбца объединения,
- Обновление повторяющихся полей в таблице
- Обновление SQL с оператором CASE
- Как обновить таблицу с помощью оператора select, который создает несколько строк?
- Операция обновления с двумя разными каталогами
- SQL - группировка по столбцу
- Операция обновления на основе выбранного SQL-сервера
- UPDATE db columns, удалив абсолютный путь и оставив имя файла на месте
UPDATE t SET t.Marketing=M_Marketing, t.Sales=S_Sales, t.Utilization=U_Utilization, t.NoDepartment=No_NoDepartment FROM CTE C JOIN Table T ON T.ID=C.CTE_ID
В своем заявлении о обновлении вам нужно сообщить SQL Server, как сопоставить данные из CTE с данными из таблицы.