![](/img/trans.png)
[英]How to update values from one where condition to other where condition on same table and column using SQL
[英]Update value of one table with other values of same column with different condition in same table
有人可以帮忙吗?
我有不同的值表2 SiteID
,我想一个替代sited id
与另一个在同一table.I值想要的值时, site id =158
与当值site id =56
结果1: Site id =158
Dt C-Id M-Id Values
01/03/2014 14354 6 25504.3047
01/03/2014 15266 6 25504.3047
01/03/2014 14354 10 25504.3047
01/03/2014 14354 15 25504.3047
01/03/2014 15266 15 25504.3047
01/03/2014 14354 16 25504.3047
结果2: Site id = 56
Dt C-Id M-Id Values
01/03/2014 14354 6 11915
01/03/2014 15266 6 536
01/03/2014 14354 10 1517
01/03/2014 14354 15 3662
01/03/2014 15266 15 1071
01/03/2014 14354 16 3662
我写了这个查询:
UPDATE [WorkDb].[dbo].[M_values]
SET [value] = (
SELECT O.[value]
FROM [WorkDb].[dbo].[M_values] AS O
WHERE O.siteid IN (56)
AND O.DATE = '2014-03-01'
AND O.C - Id IN (14354, 15266)
AND O.M - Id IN (6, 10, 15, 16, 25, 55, 56, 18)
AND ISNULL(O.value, 0) <> 0
)
WHERE (
siteid IN (158)
AND DATE = '2014-03-01'
AND C - Id IN (14354,15266)
AND M - Id IN (6,10,15,16,25,55,56,18)
AND ISNULL(value, 0) <> 0
)
该查询返回错误:
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
问题是您没有按照正确的标准加入以获得单个记录。
UPDATE mv
SET [value] = site56.[value]
FROM [WorkDb].[dbo].[M_values] mv
INNER JOIN (
SELECT O.[value],O.[date],O.[C-Id],O.[M-Id]
FROM [WorkDb].[dbo].[M_values] as O
WHERE O.siteid IN (56)
and ISNULL(O.value,0)<>0
) site56 ON site56.[date]=mv.[date] AND site56.[C-Id]=mv.[C-Id] AND site56.[M-Id]=mv.[M-Id]
WHERE (
mv.siteid IN (158)
AND mv.[date] = '2014-03-01'
and mv.[C-Id] IN (14354,15266)
and mv.[M-Id] IN (6,10,15,16,25,55,56,18)
and ISNULL(mv.[value],0)<>0
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.