Sql server 对于以下场景,如何在SQL server中通过一条update语句进行更新?
对于以下场景,如何通过一条update语句进行更新? 我有两张桌子。表A包含以下字段: 测试编号,CO,CO2,N20,CH4 TestNumber列的值是1,2,3Sql server 对于以下场景,如何在SQL server中通过一条update语句进行更新?,sql-server,Sql Server,对于以下场景,如何通过一条update语句进行更新? 我有两张桌子。表A包含以下字段: 测试编号,CO,CO2,N20,CH4 TestNumber列的值是1,2,3 TableA TestNumber CO CO2 N2O CH4 1 2
TableA
TestNumber CO CO2 N2O CH4
1
2
3
第二个名为TableB的表包含以下字段:
TestNumber、TestIdentifier、TestValue
值如下所示:
TableB
TestNumber TestIdentifier TestValue
1 CO 12.3
1 CO2 10
2 CO 9.8
2 N20 45
3 CO 12.5
3 CO2 13.0
我期待的结果是:
TestNumber CO CO2 N2O CH4
1 12.3 10
2 9.8 45
3 12.5 13.0
我使用了一段代码,比如declare table variable。然后将数据从TableB存储到table变量。然后设置rowCount=1,然后循环并删除一行,并更新工作正常的TableA。我得到了预期的结果。但我相信我可以直接执行UPDATE命令,而不需要太多的表变量声明和循环。我正在更新,但不是直接更新
我想学习如何在不循环的情况下直接更新
回复:您可以阅读有关透视表的内容。。。也许有帮助。 但是如果你的第一张桌子是静态的。。我的意思是,总是相同的列和行,你可以这样做:
Update tableA set
CO = (Select sum(testValue) from TableB where testNumber = 1 and testIdentifier = 'CO'),
CO2 = (Select sum(testValue) from TableB where testNumber = 1 and testIdentifier = 'CO2'),
N20 = (Select sum(testValue) from TableB where testNumber = 1 and testIdentifier = 'N20'),
CH4 = (Select sum(testValue) from TableB where testNumber = 1 and testIdentifier = 'CH4')
where testNumber = 1
你可以在其他测试中再写两次。。。或者如果它们是可变的。。您可以将其写入while循环中尝试以下操作:
您可以使用PIVOT
将TableB
转换为与TableA
相同的格式,将TestIdentifier
作为TableB
Select TestNumber ,[Co],[CO2],[N2O],[CH4]
FROM
( Select TestNumber,TestIdentifier,TestValue from TableB) as sourceTable
pivot
(
sum(TestValue)
for TestIdentifier in ([Co],[CO2],[N2O],[CH4])
)
as pvt
现在,您只需在TestNumber
上使用内部联接,并更新TableA
Update t
set t.Co=cte.CO,
t.CO2=cte.CO2,
t.N2O=cte.N2O,
t.CH4=cte.CH4
from TableA as t
inner join cte
on cte.TestNumber=t.TestNumber
完整的sql查询是
;With cte (TestNumber ,[Co],[CO2],[N2O],[CH4])
as
(
Select TestNumber ,[Co],[CO2],[N2O],[CH4]
FROM
( Select TestNumber,TestIdentifier,TestValue from TableB) as sourceTable
pivot
(
sum(TestValue)
for TestIdentifier in ([Co],[CO2],[N2O],[CH4])
)
as pvt
)
Update t
set t.Co=cte.CO,
t.CO2=cte.CO2,
t.N2O=cte.N2O,
t.CH4=cte.CH4
from TableA as t
inner join cte
on cte.TestNumber=t.TestNumber
对于完整的解决方案,请尝试您的意思是像
更新TableA set CO=TableB.TestValue from TableB,其中TableA.TestNumber=TableB.TestNumber和TableB.TestIdentifier='CO'
,对每种化合物重复一次?非常感谢您的帮助