如何在t-sql中在表的末尾添加总计行?

如何在t-sql中在表的末尾添加总计行?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要添加一行总和作为表的最后一行。例如: book_name | some_row1 | some_row2 | sum ---------------+---------------+---------------+---------- book1 | some_data11 | some_data12 | 100 book2 | some_data21 | some_data22 | 300

我需要添加一行总和作为表的最后一行。例如:

   book_name   |   some_row1   |   some_row2   |   sum   
---------------+---------------+---------------+----------
    book1      |   some_data11 |   some_data12 |   100
    book2      |   some_data21 |   some_data22 |   300
    book3      |   some_data31 |   some_data32 |   500
 total_books=3 |   NULL        |   NULL        |   900

我该怎么做?(T-SQL)

您可以使用
union all

select book_name, some_row1, some_row2, sum 
from table t
union all
select cast(count(*) as varchar(255)), null, null, sum(sum)
from table t;

但是,
count(*)
将为您提供表中可用的
行数
,如果
book\u name
也有
null
值,则您需要
count(book\u name)
而不是
count(*)
您可以使用
union all

select book_name, some_row1, some_row2, sum 
from table t
union all
select cast(count(*) as varchar(255)), null, null, sum(sum)
from table t;
但是,
count(*)
将为您提供表中可用的
行数
,如果
book\u name
也有
null
值,则您需要
count(book\u name)
而不是
count(*)
尝试使用ROLLUP

SELECT  CASE 
            WHEN (GROUPING([book_name]) = 1) THEN 'total_books'
            ELSE [book_name] END AS [book_name],some_row1, some_row2
        ,SUM(]sum]) as Total_Sales
From    Before
GROUP BY
        [book_name] WITH ROLLUP
试试卷起

SELECT  CASE 
            WHEN (GROUPING([book_name]) = 1) THEN 'total_books'
            ELSE [book_name] END AS [book_name],some_row1, some_row2
        ,SUM(]sum]) as Total_Sales
From    Before
GROUP BY
        [book_name] WITH ROLLUP

我发现
分组集
汇总
灵活得多。我将这样写:

select coalesce(book_name,
                replace('total_books=@x', '@x', count(*))
               ) as book_name,
       col2, col3, sum(whatever)
from t
group by grouping sets ( (book_name), () );

严格地说,
分组
函数和
案例
合并()更好。但是,分组键上的
NULL
值非常少见。

我发现
分组集
汇总
灵活得多。我将这样写:

select coalesce(book_name,
                replace('total_books=@x', '@x', count(*))
               ) as book_name,
       col2, col3, sum(whatever)
from t
group by grouping sets ( (book_name), () );

严格地说,
分组
函数和
案例
合并()更好。但是,分组键上的
NULL
值非常少见。

表中没有最后一行。仅限订购人
。这是需要理解的一件重要事情。如何在t-sql中在表的末尾添加一个总计行?答案很简单:不要。这是您应该在表示层中执行的操作…表中没有最后一行。仅限订购人
。这是需要理解的一件重要事情。如何在t-sql中在表的末尾添加一个总计行?答案很简单:不要。这是您应该在表示层中执行的操作…当我使用GROUP BY时,我可以选择GROUP BY或聚合中的列,这样至少在ms sql server中不起作用。当我使用GROUP BY时,我可以选择GROUP BY或聚合中的列,这样至少在ms sql server中不起作用。