【发布时间】:2015-09-14 11:20:51
【问题描述】:
我有一个表格,我需要在其中对选择性(特定行)的金额进行分组。
按资产名称将基金 RLWP、RLNP/UL 和 RL Estate 中的行分组为一行。
将 > RLWP、RLNP/UL 和 RL Estate 的基金编号字段重命名为 RP,但我不想在基金名称不在(> RLWP、RLNP/UL 和 RL Estate)的地方分组或求和
Asset Name |Entity Code |Total SII Amount |Fund Number
------------------------------------------------------------
GSW 4.375% |1020OB |1317697.53 |RLWP
GSW 4.375% |1020OB |1191368.74 |RLNP/UL
GSW 4.375% |1020OB |289004.18 |RL Estate
GSW 4.375% |1020OB |232360.70 |UFOIB
GSW 4.375% |1020OB |10102.50 |ABG
UKT 0.375% |1020OB |5555.20 |ABG
UKT 0.375% |1020OB |702743.3518 |RLWP
UKT 0.375% |1020OB |546232.3383 |RL Estate
我有 2 或 3 种方法可以做到这一点,但您能否建议最有效的方法,因为这只是存储过程中同一张表上其他几个计算的一部分。
我想到的一种方法是
Select
[Asset Name],
[Entity Code],
sum([Total SII Amount])
where
fundnumber in (RLWP, [RLNP/UL], RL Estate)
group by
[Asset Name], [Entity Code],
union
Select
[Asset Name],
[Entity Code],
where
fundnumber not in (RLWP, [RLNP/UL], RL Estate)
稍后将 (RLWP, [RLNP/UL] ,RL Estate) 的列名称更新为 RP。
我想到了使用 CTE 或 Cross Apply 但无法真正组成查询的其他方式。
请提出建议。
【问题讨论】:
-
您使用的是哪个版本的 SQL Server?
-
使用 SQL 2012,您应该了解一下窗口函数。您可以使用带有 ORDER BY 的 OVER 子句和在 OVER 子句中使用 PARTITION BY 的分组总和来实现“运行总和”...
-
@Shnugo 你的意思是这样的吗:- SELECT [pK_AssetValuation],[Asset Name],[Entity Code],[Total SII Amount],FundNumber, sum([Total SII Amount]) OVER (ORDER BY [FundNumber] ROWS UNBOUNDED PRECEDING) AS RunningTotal FROM tmpADSTransform1 - 但这只是给出运行总数。我只想对几行进行求和和分组。
-
是的,请尝试在 OVER 中的 ORDER BY 之前添加 PARTITION BY YourGroupColumn ,而不使用 commy :-)
标签: sql sql-server tsql group-by