如何在 DB2 中查询不同的列值,而不是不同的行?
How to query in DB2 for distinct column value, rather than a distinct row?
我正在尝试构建一个 returns 不同行的 DB2 查询,但要仅基于一列的值进行区分。
如果 itemColor
不同,下面的查询将允许具有相同订单号的多行。
select distinct
orderNumber,
itemColor,
orderDate
from ORDER_TABLE
returns...
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
一行。也许我误解了文档。
谢谢。
您可以使用 window 函数:
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;
我正在尝试构建一个 returns 不同行的 DB2 查询,但要仅基于一列的值进行区分。
如果 itemColor
不同,下面的查询将允许具有相同订单号的多行。
select distinct
orderNumber,
itemColor,
orderDate
from ORDER_TABLE
returns...
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
一行。也许我误解了文档。
谢谢。
您可以使用 window 函数:
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;