如果无法在MS SQL存储过程中使用数组,我就无法找到计算公式的有效方法。
...背景
select child_id, sum(quantity) as quantity
from table
where parent_id = @parent_id
返回类似的内容......
child_id quantity
100 50000
200 60000
300 45000
400 30000
500 15000
这是一个简化的SQL公式,用于说明我需要帮助的内容。数学并不重要(好吧,如果它没有意义 - 它是简化的,以显示我需要如何使用上面的总和数量)......
set @result = (2 * LOG(50000)) + LOG(60000) + LOG(45000) + LOG(30000) + LOG(15000)
对于上面的每个child_id,我想执行一个(select child_id,@ result)。请注意,“活动”child_id的总和数量与其他child_id(2 * LOG())的总和不同。此外,child_id的计数在2到20之间变化。如果只有2个child_id,则@result将=(2 * LOG(50000)+ LOG(60000)。
我希望这是有道理的。非常感谢您提出的任何建议。
答案 0 :(得分:1)
假设CTEs至少有SQL 2005。我疯狂的方法是,我将获得所有日志值的一个总和,然后为每个子项添加日志值,以实现总和的2 *(此子项的值)部分。
;with cteQuantity as (
select child_id, sum(quantity) as quantity
from table
where parent_id = @parent_id
group by child_id
),
cteAllLogs as (
select sum(log(quantity)) as log_sum
from cteQuantity
)
select q.child_id, log(q.quantity) + l.log_sum as result
from cteQuantity q
cross join cteAllLogs l
答案 1 :(得分:1)
嗯,这可能会让你朝着正确的方向前进,但我们可能需要更多关于计算的细节:
DROP TABLE #results
CREATE TABLE #results (parent_id INTEGER, child_id INTEGER, quantity FLOAT)
INSERT INTO #results VALUES (10, 100, 50000)
INSERT INTO #results VALUES (10, 200, 60000)
INSERT INTO #results VALUES (10, 300, 45000)
INSERT INTO #results VALUES (10, 400, 30000)
INSERT INTO #results VALUES (10, 500, 15000)
SELECT
child_id, quantity, LOG(quantity) + (SELECT SUM(LOG(quantity)) FROM #results subquery WHERE #results.parent_id = subquery.parent_id)
FROM
#results