【发布时间】:2019-07-23 01:49:26
【问题描述】:
我有一个选择查询,它返回按ParentId 分组的几行。如何在每个 parentId 组之后添加一个包含一列总和的新行?
目前我将数据保存在临时表中,结果如下。
并且我想在每个ParentId 组的末尾添加一个新行,如下所示,其中包含LoanAmount 列的总和。
任何帮助将不胜感激。非常感谢。
【问题讨论】:
标签: sql-server
我有一个选择查询,它返回按ParentId 分组的几行。如何在每个 parentId 组之后添加一个包含一列总和的新行?
目前我将数据保存在临时表中,结果如下。
并且我想在每个ParentId 组的末尾添加一个新行,如下所示,其中包含LoanAmount 列的总和。
任何帮助将不胜感激。非常感谢。
【问题讨论】:
标签: sql-server
您可以使用公用表表达式来实现此目的。在这里,我创建了一个带有 rank 列的 cte,以便按顺序对其进行排序。
;WITH cte AS
(SELECT ParentId,
sum(LoanAmount) LoanAmount,
max(rank) + 1 AS rank
FROM test
GROUP BY ParentId)
SELECT *
FROM test
UNION ALL
SELECT *
FROM cte
ORDER BY ParentId, rank
【讨论】:
在此处查看此链接enter link description here
我想你想要:
SELECT ParentID, SUM(VALUE1), SUM(VALUE2)
FROM tableName
GROUP BY ID
您不能像在 excel 中那样在每个组之后或底部执行此操作,但您可以有效地在查询中创建一个“新表”。
是的,看到您更新的评论,您的主要问题是您将其视为 excel,SQL 不是电子表格工具 - 它是一个关系数据库。我建议您阅读 SQL 介绍 - 您会很快掌握这些概念。
我给你的查询可以创建为存储过程。
如果您觉得我已经回答了您的问题,请点赞:)
【讨论】:
您可以通过子查询对组求和,然后将它们合并到联合中
; with cte as
( select 9999 as Slno, Level, ParentId, Ent_id, relation, sum(colname) as colname from table group by Level, ParentId, Ent_id, relation)
, ct as ( select row_number() over (partition by ParentId order by level) as Slno, Level, ParentId, Ent_id, Name, --- rest of your column names
colname from table
union all
select Slno, Level, ParentId, Ent_id, '' as Name, ---rest of '' for each column with column name as alias
colname from cte )
select Slno, Level, ParentId, Ent_Id, Name, ---- your columns of table
colname from ct order by Slno
这只是粗略的想法。如有任何困惑,请随时提出。
发布您的确切架构以获取准确的详细信息。
【讨论】: