SQL server中其他记录中剩余记录之和的前10条记录
我有一个表,它由4列组成-(id int,location varchar(max),[date]datetime,Total_Sales Money),其中包括输出中的20条记录。我想要11行,其中前10行是原样,第11行应该是剩余行的总和,即其他_位置的11到20行。请帮我查询一下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
我想要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行”?按日期?按金额?