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