分组依据,每条记录一行

时间:2017-01-09 18:39:57

标签: sql sql-server group-by

我的数据与此类似:

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个转移#。

由于

2 个答案:

答案 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#

我认为这符合您所描述的想法。