Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在Sql中乘法列_Sql Server - Fatal编程技术网

Sql server 如何在Sql中乘法列

Sql server 如何在Sql中乘法列,sql-server,Sql Server,我有一个专栏: -0.75640390000 --number1 0.58303570000 --number2 -0.07794400000 --number3 0.00000000000 -- .... 0.58303570000 -0.07794400000 0.42976550000 0.58781540000 0.00909080000 0.58781540000 如何计算(1+number1/100)*(1+number2/100)*(1+number3/100)*。。。etc

我有一个专栏:

-0.75640390000 --number1
0.58303570000  --number2
-0.07794400000 --number3
0.00000000000  -- ....
0.58303570000
-0.07794400000
0.42976550000
0.58781540000
0.00909080000
0.58781540000

如何计算
(1+number1/100)*(1+number2/100)*(1+number3/100)*。。。etc

如果
number1
是第一行的值,而
number2
是下一行的值,则使用
行号()

输出:

1,01874941736518
EDIT1

接受了200万行的挑战:)我创建表:

CREATE TABLE [dbo].[Testing](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [col] [decimal](19, 11) NULL,
CONSTRAINT [PK_id_test] PRIMARY KEY CLUSTERED ([id] ASC)
) 
把这个放进去:

;WITH cte AS (
SELECT  CAST(0.00000000002 as decimal(19,11)) as col, 
        1 as rn
UNION ALL 
SELECT  CAST(col + 0.00000000002 as decimal(19,11)),
        rn+1
FROM cte 
WHERE rn < 2000000
)

INSERT INTO [dbo].[Testing] ([col])
SELECT col from cte
OPTION (MAXRECURSION 0)
产出为:

1.49182491770
查询在16秒内在本地PC上执行

EDIT2

借助临时表格:

CREATE TABLE #Testing (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [col] [decimal](19, 11) NULL,
CONSTRAINT [PK_id_testing] PRIMARY KEY CLUSTERED ([id] ASC)
) 

INSERT INTO #Testing ([col])
SELECT Put_Column_Name_Here 
FROM Put_Table_Name_Here

;WITH rec AS (
SELECT  CAST((1+col/100) as decimal(19,11)) as d,
        1 as l
FROM #Testing
WHERE id = 1
UNION ALL
SELECT CAST( d * (1+col/100) as decimal(19,11)),
        l+1
FROM rec r
INNER JOIN #Testing c
    ON c.id = l+1
)

SELECT top 1 d
FROM rec
ORDER BY l desc
OPTION (MAXRECURSION 0)

DROP TABLE #Testing

你已经试过什么了?你到底坚持什么?我使用((总和(log(1 +列/ 100))),但这个计算错误值它提供什么值?你认为正确的值?读一读如何问我链接的链接,你会得到一个更好的答案,如果你提供所有的信息前面。(总和(对数(1+列/100)))我从我发给你的链接中得到两个不同的结果,并用更多信息编辑你的原始问题。我们有你的数据,现在向我们展示你目前收到的结果以及你认为正确的结果。除非你给我们更多的信息,否则我们将尽力提供帮助。输出结果将由一个结果(1)决定+(-0.75640390000/100))*(1+((0.58303570000)/100)…得到它:)检查答案:)如果你有2000行,你怎么做?:)你可能会因为算术溢出错误而失败。:)这列的数据类型到底是什么?这张表上有索引吗?如果我们最终能计算出来,那就没问题了,我们可以将它转换成十进制(19,11),,列类型十进制(19,11),
1.49182491770
CREATE TABLE #Testing (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [col] [decimal](19, 11) NULL,
CONSTRAINT [PK_id_testing] PRIMARY KEY CLUSTERED ([id] ASC)
) 

INSERT INTO #Testing ([col])
SELECT Put_Column_Name_Here 
FROM Put_Table_Name_Here

;WITH rec AS (
SELECT  CAST((1+col/100) as decimal(19,11)) as d,
        1 as l
FROM #Testing
WHERE id = 1
UNION ALL
SELECT CAST( d * (1+col/100) as decimal(19,11)),
        l+1
FROM rec r
INNER JOIN #Testing c
    ON c.id = l+1
)

SELECT top 1 d
FROM rec
ORDER BY l desc
OPTION (MAXRECURSION 0)

DROP TABLE #Testing