SQL server中其他记录中剩余记录之和的前10条记录

SQL server中其他记录中剩余记录之和的前10条记录,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一个表,它由4列组成-(id int,location varchar(max),[date]datetime,Total_Sales Money),其中包括输出中的20条记录。我想要11行,其中前10行是原样,第11行应该是剩余行的总和,即其他_位置的11到20行。请帮我查询一下 我想要11行,其中前10行按原样排列,第11行应该是剩余行的总和您可以使用union选择前10行和1行总和 可能是代码: SELECT id, location, date, total_sales FROM t

我有一个表,它由4列组成-(id int,location varchar(max),[date]datetime,Total_Sales Money),其中包括输出中的20条记录。我想要11行,其中前10行是原样,第11行应该是剩余行的总和,即其他_位置的11到20行。请帮我查询一下


我想要11行,其中前10行按原样排列,第11行应该是剩余行的总和

您可以使用
union
选择前10行和1行总和

可能是代码:

SELECT id, location, date, total_sales FROM table limit 10 // where etc..
UNION
SELECT 0 as id, '' as location, 0 as date, sum(total_sales) as total_sales FROM table;

在SQL Server 2012中,使用
ROW\u NUMBER()
window函数可以实现这一点。创建
ROW\u NUMBER()
为每行设置
RowNum
,并基于结果,使用
UNION ALL
返回结果:

;WITH CTE AS (
    SELECT id, location, [date], Total_Sales,
           ROW_NUMBER() OVER (ORDER BY Id) AS RowNum
    FROM TableName
)

SELECT CAST(id AS VARCHAR(30)) AS Id,
       location, 
       CAST([date] AS VARCHAR(30)) AS [date], 
       CAST(Total_Sales AS VARCHAR(30)) AS Total_Sales 
FROM CTE 
WHERE RowNum BETWEEN 1 AND 10
UNION 
SELECT '11-20 ids' AS id, 
       '11-20 AS locations' as location, 
       '11-20 dates' AS [date], 
       SUM(Total_Sales) AS Total_Sales 
FROM CTE 
WHERE RowNum BETWEEN 11 AND 20

我会使用
行数()
和条件聚合。这样,您就可以使用一个
分组方式来执行此操作:

select (case when seqnum <= 10 then id end) as id,
       max(case when seqnum <= 10 then location else 'All else' end) as location,
       max(case when seqnum <= 10 then datetime end) as datetime,
       sum(amount)
from (select t.*,
             row_number() over (order by amount desc) as seqnum
      from t
     ) t
group by (case when seqnum <= 10 then id end);
select(seqnum时的情况)如何定义“前10行”?按日期?按金额?