使用计算表达式更新sql临时表列
我执行下面的SQL代码。虽然计算表达式不是零,但所有行都以零更新,因为在任何情况下,附加信息分母都会更大使用计算表达式更新sql临时表列,sql,sql-server,Sql,Sql Server,我执行下面的SQL代码。虽然计算表达式不是零,但所有行都以零更新,因为在任何情况下,附加信息分母都会更大 UPDATE #t SET ProportionOfvehicle = (CountOfVehicle / @TotalNumberOfPrivateVehicles)*100 WHERE LegalPersonID IS NOT NULL; 我终于自己解决了这个问题。我创建了一个临时表,其计算字段的数据类型如下所示 **CREATE TABLE #t ( CountOfVehic
UPDATE #t
SET ProportionOfvehicle = (CountOfVehicle / @TotalNumberOfPrivateVehicles)*100
WHERE LegalPersonID IS NOT NULL;
我终于自己解决了这个问题。我创建了一个临时表,其计算字段的数据类型如下所示
**CREATE TABLE #t
(
CountOfVehicle BIGINT,
LegalPersonID BIGINT,
RegionID BIGINT,
ProportionOfvehicle FLOAT,
ProportionOfAccident FLOAT,
ProportionOfPersonel FLOAT
)**
然后插入其他字段(计算字段除外),代码如下
**INSERT INTO #t
(
CountOfVehicle,
LegalPersonID,
RegionID,
ProportionOfvehicle,
ProportionOfAccident,
ProportionOfPersonel
)
SELECT COUNT(*) AS CountOfVehicle,
LegalPersonID,
RegionID,
NULL AS ProportionOfvehicle,
NULL AS ProportionOfAccident,
NULL AS ProportionOfPersonel
FROM Bus.VehicleOwnerships
WHERE OwnershipTypeValue IN (1,2)
GROUP BY LegalPersonID,
RegionID**
最后用下面的语句更新计算字段
**UPDATE #t
SET ProportionOfvehicle = CountOfVehicle / @TotalNumberOfOrganizationVehicles
WHERE RegionID IS NOT NUL**
纯粹的猜测:这很可能就是我们所说的“整数”数学<代码>9/10=0其中as
9.0/10.0=0.9
。这是因为SQL Server(和许多其他应用程序)将在整个表达式中使用相同的数据类型(如果这些数据类型都相同的话)0.9
不能表示为整数,因此小数部分被去掉;给出0
。如果数据类型不同,SQLServer将使用一种称为“数据类型优先”(Google it)的方法。示例DDL和DML,以及复制该问题的@TotalNumberOfPrivateVehicles
的值,您的预期结果将极大地帮助我们帮助您。我个人想知道,如何有人可以“拥有”(?)少于整辆车,@Xaphas.)就像有人可以拥有一匹活马的一部分一样???1.0*CountOfVehicle
来获得数字数学<代码>1e*车辆计数以获取浮点值。如果目标类型为数值
,则建议使用显式转换
,因为精度和比例是隐式确定的。请共享示例数据