Sql 在Select查询的结果集中添加行
我正在努力实现以下目标 例如 这就是我所拥有的Sql 在Select查询的结果集中添加行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在努力实现以下目标 例如 这就是我所拥有的 Name Amount AAA 15 AAA 20 CCC 30 CCC 50 这就是我想要的 Name Amount AAA 15 AAA 20 35 --(want to insert row which display sum of 1st & 2nd rows)
Name Amount
AAA 15
AAA 20
CCC 30
CCC 50
这就是我想要的
Name Amount
AAA 15
AAA 20
35 --(want to insert row which display sum of 1st & 2nd rows)
CCC 30
CCC 50
80 --(want to insert row which display sum of 3rd & 4th rows)
我建议做2个选择,然后使用union all加入它们
Select name, amount from table
union all
select '' as total, sum(amount) from table
如果只是按名称查找行的摘要,可以使用union、group by和order by:
DECLARE @tbl TABLE (Name char(3), Amount int)
insert @tbl
VALUES
('AAA',15)
,('AAA',20)
,('CCC',30)
,('CCC',50)
select Name, Amount
FROM @tbl
UNION ALL
SELECT Name, SUM(Amount)
FROM @tbl GROUP BY Name
ORDER BY Name
对于使用subquery和CTE(仅用作实际表的示例替换)的工作示例,请采用以下方法:
with vals as
(
select 'aaa' as Name, 15 as Amount
union all
select 'aaa' as Name, 10 as Amount
union all
select 'bbb' as Name, 20 as Amount
union all
select 'bbb' as Name, 30 as Amount
union all
select 'bbb' as Name, 50 as Amount
)
select *
from
(
select 'Amount' as ValType, Name, Amount
from vals
union all
select 'Total' as ValType, Name, sum(Amount)
from vals
group by Name
)
order by Name, ValType
;
这将按名称列进行分组,并在子查询中求和,然后使用手动添加的ValType标识符列对输出进行排序。我使用UNION完成了此操作
SELECT * FROM
(SELECT * FROM (VALUES ('AAA',15),
('AAA',20),
('CCC',30),
('CCC',50)) CT (NAME,AMOUNT)
UNION ALL
SELECT NAME+' '+ 'Total' as Tot ,SUM(AMOUNT) FROM (VALUES ('AAA',15),
('AAA',20),
('CCC',30),
('CCC',50)) CT (NAME,AMOUNT)
GROUP BY NAME+' '+ 'Total') X
这是一个格式问题。在程序逻辑中执行,而不是在SQLSQL表中执行,结果集表示无序集。除非另一列指定了排序,否则没有前两行这样的东西。是否固定为2行?或者可能不止这些?@juergend那么你能用c语言提供编程逻辑吗?不,你自己做。如果你被卡住了,那就把你试过的C代码贴出来,并描述一下你在C代码上遇到的问题。你介意我编辑你的答案来扩展它吗?我的答案几乎只是你的延伸/澄清,所以我觉得不需要一个新的答案。如果你觉得我的编辑没有增加内容,你可以随时拒绝。没问题,去做吧。我不太确定CTE除了作为获取临时值的一种方式外,还能起到什么作用-这个问题似乎表明这些值实际上来自一个表。这主要是为了一个独立的工作示例。是的,最终工作代码将使用实际表格进行修改。我将CTE移到实际查询之外以避免混淆。非常感谢@DanField。它对我有效。不,这只是将所有记录相加为一个聚合值。它不基于任何类型的分组求和,而这正是OP所要求的。@gmiley,其目的不是提供完整的答案,而是展示如何解决问题。通过使用2个选择和union all完全可以解决此问题。