Обновление строки основной таблицы с использованием другой таблицы, содержащей несколько строк на сервере SQL - PullRequest
0 голосов
/ 08 октября 2018

У меня есть 2 таблицы с общим идентификатором столбца

Table A:
ID   value1    value2    value3
------------------------------------        
 1     0         0        0

Table B:
ID    value_type      value   
--------------------------------------          
1     value1          0.01  
2     value2          0.02
3     value3          0.03

Я хочу обновить значение таблицы, используя значение таблицы b,

Final Output :

ID   value1    value2    value3
-----------------------------------------
1     0.01       0.02      0.03

Может кто-нибудь показать мне, как написать запроси получить результат, как указано выше, большое спасибо!Я пытался присоединиться, пивот.все результат ничего.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

с помощью 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

0 голосов
/ 08 октября 2018

Быстрое (но не масштабируемое) решение состояло бы в использовании оператора обновления с объединением производной таблицы с условным агрегированием:

UPDATE T
SET value1 = v1,
    value2 = v2,
    value3 = v3
FROM TableA T
JOIN 
(
    SELECT 1 As ID
           MAX(CASE WHEN value_type = 'value1' THEN value END) As v1,
           MAX(CASE WHEN value_type = 'value2' THEN value END) As v2,
           MAX(CASE WHEN value_type = 'value3' THEN value END) As v3
    FROM TableB
) V
    ON T.ID = V.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...