我的数据与此类似:
ID | Order# | Transfer#
1 | Abc | 123a
2 | Abc | 456b
3 | Abc | 123a
4 | Abc | NULL
5 | Def | 123c
6 | Def | 456d
7 | Def | 123c
8 | Def | NULL
我想运行一个返回1行的查询,选择哪个传输#(null除外)无关紧要。
如果我运行此查询:
SELECT order#,
transfer#
FROM coitem
WHERE order# ='abc'
AND transfer# IS NOT NULL
GROUP BY order# ,
transfer#
它返回:
Order# | Transfer#
Abc | 123a
Abc | 456b
Def | 123c
Def | 456d
有没有办法只返回1行,如下所示:
Order# | Transfer#
Abc | 456b
Def | 123c
我的目标是通过一个查询查看系统中所有订单的前1个转移#。
由于
答案 0 :(得分:0)
您可以将ROW_NUMBER()
功能用于此目的,例如
select * from (
select [Order], Transfer,
ROW_NUMBER() OVER(PARTITION BY Transfer ORDER BY Transfer) AS rn
from tbl1 ) xxx
where rn = 1 and Transfer is not null;
答案 1 :(得分:0)
有几种表达方式,但对我来说,最可读的方式是:
SELECT
order#,
MAX(transfer#) AS Transfer#
FROM coitem
WHERE transfer# IS NOT NULL
GROUP BY order#
我认为这符合您所描述的想法。