在同一行转置(枢轴)中按百分比拆分的复杂 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 金额?的主要内容,如果未能解决你的问题,请参考以下文章

用于转置的 Unpivot 枢轴

Spark:行到列(如转置或枢轴)

仅使用最小 COUNT() 转置行和列(又名枢轴)?

尝试在 T-SQL 中转置和创建枢轴

oracle sql 11G中如何将列转置为行

更改 Google 表格布局的公式:转置和拆分