union与union all,ROW_NUMBER()函数

本文介绍了SQL中的两个实用技巧:如何使用union和union all合并报表,以及如何利用ROW_NUMBER()进行分组排序。对于处理大量数据时提高效率非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、union 使用的时候将两张报表合并,前提条件是,两张表的列是完全一致的,

union自带去重功能,要完全合并,请用union all

2、ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)

分组排序,PARTITION BY相当于 group by就是分组,order by就是排序。

### 如何在包含 `UNION ALL` 的 SQL 查询中使用 `ROW_NUMBER()` 实现排序和分页 为了在一个复杂的查询结构中,特别是当涉及到多个表通过 `UNION ALL` 组合时,可以采用 `ROW_NUMBER()` 来实现有效的排序以及分页操作。下面展示了一个具体的例子说明这一过程。 #### 创建示例数据集 首先创建两个简单的表格并填充一些基础数据用于演示目的: ```sql IF OBJECT_ID('tempdb..#TableA', 'U') IS NOT NULL DROP TABLE #TableA; CREATE TABLE #TableA ( ID INT, Name NVARCHAR(50), Value DECIMAL(9, 2) ); INSERT INTO #TableA (ID, Name, Value) VALUES (1, N'Alice', 100.00), (2, N'Bob', 200.00); IF OBJECT_ID('tempdb..#TableB', 'U') IS NOT NULL DROP TABLE #TableB; CREATE TABLE #TableB ( ID INT, Name NVARCHAR(50), Value DECIMAL(9, 2) ); INSERT INTO #TableB (ID, Name, Value) VALUES (3, N'Eve', 300.00); ``` #### 应用 `ROW_NUMBER()` 和 `UNION ALL` 接下来构建一个带有 `UNION ALL` 的查询语句,并在此基础上加入 `ROW_NUMBER()` 函数来进行编号处理以便后续能够基于此字段执行分页逻辑: ```sql WITH CombinedData AS ( SELECT t.ID, t.Name, t.Value, ROW_NUMBER() OVER (ORDER BY t.Name ASC) as RowNum -- 对联合后的结果按名称升序排列并分配行号 FROM ( SELECT * FROM #TableA UNION ALL SELECT * FROM #TableB ) t ) SELECT * FROM CombinedData cd WHERE cd.RowNum BETWEEN ((@PageNumber - 1) * @PageSize + 1) AND (@PageNumber * @PageSize); -- 根据所需页面大小过滤行数 ``` 上述代码片段展示了如何先将来自不同源的数据组合起来再对其进行统一的排序编号,最后按照给定的页码参数筛选出对应范围内的记录[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值