sql - 如何在 DB2 中查询不同的列值,而不是不同的行?
问题描述
我正在尝试构建一个返回不同行的 DB2 查询,但区别仅基于一列的值。
下面的查询将允许具有相同订单号的多行,例如,itemColor
不同的。
select distinct
orderNumber,
itemColor,
orderDate
from ORDER_TABLE
返回...
order_number item_color order_date
0001 | red | 2018-06-19
0001 | green | 2018-06-19 // DUPLICATE ORDER_NUMBER
0002 | red | 2018-06-19
0003 | red | 2018-06-19
0004 | red | 2018-06-19
我想要的是让我的查询做这样的事情:
select
orderNumber,
itemColor,
orderDate
from ORDER_TABLE
where orderNumber is distinct
这样我就可以放心,每个订单号只会返回一条记录。DB2 似乎不允许不同的列值,而只允许不同的完整行。
我看到的一个建议说要做一个子查询,如下所示:
select
orderNumber,
itemColor,
orderDate
from ORDER_TABLE
where orderNumber in (select distinct(orderNumber) from ORDER_TABLE)
...但遗憾的是这不起作用,我仍然orderNumber
在我的结果集中看到了相同的记录。
我看到官方文档说要使用group by
运算符-但这似乎是用于聚合函数,我不想聚合任何记录!我只想要每行orderNumber
。也许我误解了文档。
谢谢。
解决方案
您可以使用窗口函数:
select orderNumber, itemColor, orderDate
from (select o.*, row_number() over (partition by orderNumber order by orderNumber) as seqnum
from ORDER_TABLE
) o
where seqnum = 1;
推荐阅读
- pandas - excel索引与熊猫匹配
- linux - 无法使用脚本写入文件
- reactjs - 将 React 点击处理程序传递给子组件
- ionic-framework - 运行此命令“ionic cordova run android”时发生以下错误
- c# - 当 C# 中的双精度为 Null/Empty 时如何创建异常?
- html - 位置:固定在导航栏上,但是当我单击打开导航按钮时,我的页脚堆叠在它上面
- bash - bashrc 和导出变量
- r - 从矩阵中提取总和最大的元素而不重复行或列的算法?
- node.js - 无法让 Passport 与 React 和 Node 一起使用,没有 Passport 身份验证可以正常工作
- ios - 自定义子视图控制器的宽度和高度不起作用