首页 > 解决方案 > 如何在 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。也许我误解了文档。

谢谢。

标签: sqldb2

解决方案


您可以使用窗口函数:

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;

推荐阅读