在同一行转置(枢轴)中按百分比拆分的复杂 SQL 金额?
Posted
技术标签:
【中文标题】在同一行转置(枢轴)中按百分比拆分的复杂 SQL 金额?【英文标题】:Complicate SQL Amount split by percentage in same row transpose (Pivot)? 【发布时间】:2015-09-01 15:44:17 【问题描述】:我正在努力将总金额字段拆分为同一行中的百分比,然后使用应用百分比的金额类型更新最后一列。
示例数据
Total Amount | UF% | UFI% |RA% |RL% |NP% | AmountType
100 |0.00 |20 |9.15 |0.75 |70.01
1520.23 |64.4 |19.1 |15.5 |0.25 |0.75
158520.03|13.25 |35 |2.25 |19.28 |30.22
我必须获得总金额列的百分比,然后将它们作为附加行插入到同一个表中,并更新最后一列是什么类型的金额。
例如对于第一行,我可以获得 5 个新行
Total Amount Amount type
0 UF%
20 UFI%
9.15 RA%
0.75 RL%
70.01 NP%
我一步一步创建了 5 个新列来计算百分比,如 TotalAmount UF%、TotalAmount UFI%、TotalAmountRA% 等等…… 选择 [TotalAmount]* UF% 为 [TotalAmount UF%] ... 等等。
我被困在这里,我应该使用 Pivot/unpivot 吗?还是案例? 或者还有其他更简单的方法来使用 row over partition by 吗?
请提出建议。
【问题讨论】:
在提供的数据样本中有 7 个标题和 6 列。第 7 列应该包含什么? @Paolo 我认为只是一个参考,每一列都是AmountType
,正如您在 OP 预期结果中看到的那样
现在我注意到了。格式化确实很有帮助^^
顺便说一句。你想要TotalAmount
* AmountType%
?因为有一个 TotalAmount =100 的示例可能会令人困惑。不知道你要不要AmountType%
第7列(AmountType%)为空,需更新金额类型UF、UFI...等
【参考方案1】:
这应该适合你。只需将其复制到一个空的查询窗口并执行即可。适应您的需求...
编辑:计算百分比...
declare @amounts table (TotalAmount decimal(8,2),[UF%] decimal(4,2), [UFI%] decimal(4,2)
,[RA%] decimal(4,2),[RL%] decimal(4,2)
,[NP%] decimal(4,2));
insert into @amounts values
(100,0.00,20,9.15,0.75,70.01)
,(1520.23,64.4,19.1,15.5,0.25,0.75)
,(158520.03,13.25,35,2.25,19.28,30.22);
select up.TotalAmount
,up.Percentag
,(up.TotalAmount/100)*up.Percentag AS AmountPercentage
,up.Amount AS AmountType
from
(
select *
from @amounts
) AS tbl
unpivot
(
Percentag FOR Amount IN([UF%],[UFI%],[RA%],[RL%],[NP%])
) AS up
【讨论】:
谢谢它在一定程度上有所帮助,但在我们取消透视之前,我需要通过将总金额乘以每个百分比来计算百分比..总金额 X UF%..总金额 X RA% ..等等然后取消旋转百分比的值。 @PuneetD, PIVOT 之后的计算不是更容易吗?我编辑了我的答案,只需检查我的解决方案...如果有帮助,请投票和/或标记为已接受,谢谢 是的,这对我来说很有意义,让我先旋转 % 列,然后计算金额的百分比。 嗨,Shungo,我正在努力接受这一点,但作为我的新会员,直到我获得 15 分,我无法接受。你知道有什么其他方式不能接受它吗? @PuneetD,谢谢!只要问一些好问题,你很快就会得到你的分数。我只是赞成上面的一个......获得15分并不难。记住我,当你得到分数时回来:-)以上是关于在同一行转置(枢轴)中按百分比拆分的复杂 SQL 金额?的主要内容,如果未能解决你的问题,请参考以下文章