分部

时间:2016-09-26 06:40:26

标签: sql-server sql-server-2008

这是我的代码:

update Market 
set VatCodeID =(select  VATValue from Market) / (select  TotalValue from Market)

我收到错误:

  

Msg 512,Level 16,State 1,Line 1   子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。   声明已经终止。

我也希望同时进行Round(VatcodeID,0)

1 个答案:

答案 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   |
+-----------+----------+------------+--------------------+