с помощью pivot мы можем сделать это
Поскольку iam хранит данные в одной таблице, а после этого только обновление iam doinn
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.value_type)
FROM #b c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT rn as id , ' + (@cols) + ' into dynamictable from
(
select *,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID ) AS RN
from #b
) x
pivot
(
MAX(VALUEE)
for VALUE_TYPE in (' + @cols + ')
) p
'
exec(@query)
UPDATE T
SET T.value1 = V.value1,
T.value2 = V.value2,
T.value3 = V.value3
FROM #a T
JOIN
(SELECT id ,MAX(VALUE1)VALUE1 , MAX(VALUE2)VALUE2, MAX(VALUE3)VALUE3
FROM dynamictable
GROUP BY id
) V
ON T.ID = V.ID
![enter image description here](https://i.stack.imgur.com/j9L8u.png)