如何获取列的百分比,然后将其作为行插入
Col1 item TotalAmount**
1 ABC 5558767.82
2 ABC 4747605.5
3 ABC 667377.69
4 ABC 3844204
6 CTB 100
7 CTB 500.52
我需要为每个项目创建一个新的列百分比,这是我做过的: - 选择项目,(来自table1的totalAmount / select sum(totalAmount))为百分比 从table1 逐项分组
Col1 item TotalAmount percentage
1 ABC 5558767.82 38
2 ABC 4747605.5 32
3 ABC 667377.69 5
4 ABC 3844204 26
6 CTB 100 17
7 CTB 500.52 83
现在,复杂的部分我必须通过将此百分比乘以另一个表中的数量来计算另一个数量,即table2 ii)通过将表1的总量列溢出为2行来更新总量列 - 新计算PledgeAmount和第2行的第1行 - (totalAmount - PledgeAmount)
*选择t1.percentage * t2.new金额为[PledgeAmount] 从表1加入table2,其中t1.item = t2.item *
。例如对于col1,数量为5558767.82将分为两行。 最终结果样本: -
Col1 item TotalAmount Type
1 ABC 363700.00 Pledge
1 ABC 5195067.82 Unpledge
...
我正在使用临时表来进行计算。 我认为其中一种方法是将Pledged和Unpledged数量计算为新列并透视它,但是它的数百个列的巨大表格将无法快速执行。
还有其他任何有效的方式吗?
答案 0 :(得分:0)
您可以使用窗口函数来解决此问题 - 首先在子查询中计算总数,然后在主查询中计算百分比:
Select *, (totalAmount/total_for_item)*100 as percent_of_total
from (
SELECT t.*,
SUM(totalAmount) OVER (PARTITION BY item) as total_for_item
FROM table t
) sub
答案 1 :(得分:0)
首先,让我们获得每件物品的总金额:
Collection.sort(ip_Object_List, new IPListComparator);
现在很容易达到百分比:
SELECT item, SUM( totalAmount ) as sumTotal
INTO #totalperitem
FROM table1
GROUP BY item
棘手的部分:SELECT t1.Col1,
t1.item,
t1.totalAmount,
t1.totalAmount/tpi.sumTotal*100 AS percentage
FROM table1 t1
INNER JOIN #totalperitem tpi on ...
中有/无匹配的行。可以使用table2
或我的偏好使用单个外部联接来完成:
WHERE NOT EXISTS
基本技巧是根据SELECT t1.item,
CASE WHEN tpledged.item IS NULL
THEN "Unpledged"
ELSE "Pledged"
END,
SUM( t1.totalAmount ) AS amount
FROM table1 t1
LEFT OUTER JOIN table2 tpledged ON t1. ... = tpledged. ...
GROUP BY t1.item,
CASE WHEN tpledged.item IS NULL
THEN "Unpledged"
ELSE "Pledged"
END
中是否存在记录创建一个人工列,并按人工列分组。