2017-01-09 82 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服務器? –