2017-01-09 71 views
-1

我有类似于这样的数据: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个转让编号,并带有一个查询。

感谢

+3

[标准](http://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group)示例[标签:最大每个组]的查询(组的大小是一个) –

回答

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; 
0

有几种方式来表达这一点,但对我来说,最可读的方式是:

SELECT 
    order#, 
    MAX(transfer#) AS Transfer# 
FROM coitem 
WHERE transfer# IS NOT NULL 
GROUP BY order# 

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

+0

谢谢杰米,我试过了,不幸的是一些命令中有字母,最大值将不能正常工作 – user135094

+0

最大通常对字符串('varchar')以及数字起作用。 Microsoft SQL服务器? –