繁体   English   中英

使用SQL Server中具有多行的另一个表更新主表行

[英]Updating the main table row using another table which have multiple rows in sql server

我有2个具有共同列ID的表

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的值更新表A的值,

Final Output :

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

谁能告诉我如何编写查询并如上所述获取结果,谢谢! 我尝试加入,枢纽。 一切都没有结果。

一种快速(但不具有可伸缩性)的解决方案是将update语句与带有条件农业的派生表的联接一起使用:

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

使用枢轴,我们可以做到这一点

由于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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM