我在SSRS固定资产折旧报告中面临一个问题,那就是如何计算折旧值?我用这个公式计算( (ACQUISITIONPRICE /折旧期)*折旧仍然存在),但是这个值是不正确的,让我们举个例子,
ASSETID,ASSETGROUP,NAME,LIFETIMEREST,ACQUISITIONPRICE
BLDRNV53,R楼,防水工程,60,-57,370
SQL查询中的计算:
SELECT ASSETTABLE.ASSETID, ASSETTABLE.ASSETGROUP, ASSETTABLE.NAME, (ASSETBOOK.LIFETIMEREST * (ASSETBOOK.ACQUISITIONPRICE / ASSETBOOK.LIFETIME)) as AccDep
FROM ASSETBOOK INNER JOIN
ASSETTABLE ON ASSETBOOK.ASSETID = ASSETTABLE.ASSETID AND ASSETBOOK.DATAAREAID = ASSETTABLE.DATAAREAID
WHERE (ASSETBOOK.DEPRECIATION = 1) AND ASSETBOOK.STATUS = 1
示例:(370/60) * -57) = -351.5,但系统报告正在计算它-350.550,有0.95的差异,整个折旧值有这样的小差异。
请帮帮忙
发布于 2012-02-18 15:51:49
在本例中,缺少的是固定资产刮取值,为1.000,所以方程是(((Acquisition Price - Scrape Value) / Depreciation Period) * Depreciation Remain)
。
让我们用数字填充:((370-1)/ 60) * -57) = -350.550
谢谢大家的帮助
发布于 2012-02-14 20:42:25
我不明白-350.550
值是从哪里来的。我无法在我的测试中复制它。
我的建议是确保ACQUISITIONPRICE
的列数据类型准确地表示存储在数据库中的数据类型。给定名称,我假设存储的值代表某种类型的货币。小数数据类型可能是一个很好的选择,比如十进制(10,2)。根据需要提高精度以满足您的要求。
在舍入值之前执行所需的所有计算,如果需要,则在表示层中执行。
下面的示例result演示了不同数据类型对结果的影响:
-- create temporary table, columns with integer datatype
IF OBJECT_ID('tempdb.dbo.#Asset') IS NOT NULL
DROP TABLE #Asset;
CREATE TABLE #Asset (
LifetimeRest INTEGER NOT NULL,
AcquisitionPrice INTEGER NOT NULL,
Lifetime INTEGER NOT NULL
);
-- load sample data
INSERT INTO #Asset VALUES (-57, 370, 60);
-- result is -342 with integer datatype and no conversion
SELECT
IntegerCalculation = LifetimeRest * (AcquisitionPrice / Lifetime)
FROM #Asset;
-- result is -351.500000 is with dynamic decimal conversion
SELECT
DynamicDecimalCalculation = LifetimeRest *
(CAST(AcquisitionPrice AS DECIMAL) / Lifetime)
FROM #Asset;
-- change price datatype to decimal with consistent precision and scale
ALTER TABLE #Asset ALTER COLUMN AcquisitionPrice DECIMAL(10, 2);
-- result is -351.4999620 with static decimal precision and scale,
-- and no on the fly conversion
SELECT
StaticDecimalCalculation = LifetimeRest * (AcquisitionPrice / Lifetime)
FROM #Asset;
-- cleanup
IF OBJECT_ID('tempdb.dbo.#Asset') IS NOT NULL
DROP TABLE #Asset;
https://stackoverflow.com/questions/9276673
复制相似问题