这是我的代码:
update Market
set VatCodeID =(select VATValue from Market) / (select TotalValue from Market)
我收到错误:
Msg 512,Level 16,State 1,Line 1 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 声明已经终止。
我也希望同时进行Round(VatcodeID,0)
答案 0 :(得分:2)
您在这里使用了两个子查询:
(select VATValue from Market) / (select TotalValue from Market)
尝试分别标记它们并运行它们。
select VATValue from Market;
select TotalValue from Market;
您将获得多个结果。 SQL抱怨,因为它不能与结果集分开...
你确定,你的子选择只返回一个值......
可能是,你的查询应该是这样的:
update Market set VatCodeID =VATValue/TotalValue;
当您的子选择查询同一个表时,您可能只想使用同一行的值...
DECLARE @market TABLE(VATCodeID FLOAT,VATValue FLOAT,TotalValue FLOAT);
INSERT INTO @market VALUES
(1,2,3)
,(1,11.5,3.1)
,(1,33.7777,(10.0/3.0));
SELECT * FROM @market;
UPDATE @market SET VATCodeID=ROUND(VATValue/TotalValue,0);
SELECT *
,VATValue/TotalValue AS CheckWithThisValue
FROM @market
结果
+-----------+----------+------------+--------------------+
| VATCodeID | VATValue | TotalValue | CheckWithThisValue |
+-----------+----------+------------+--------------------+
| 1 | 2 | 3 | 0,666666666666667 |
+-----------+----------+------------+--------------------+
| 4 | 11,5 | 3,1 | 3,70967741935484 |
+-----------+----------+------------+--------------------+
| 10 | 33,7777 | 3,333333 | 10,1333110133311 |
+-----------+----------+------------+--------------------+