Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Select查询的结果集中添加行_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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完全可以解决此问题。