2014-07-01 43 views
0

我看過很多類似的問題,但沒有一個能夠完全滿足我的需求,而且我無法從自己的其他問題中推斷出解決方案。Sybase在一列上選擇截然不同,不在乎別人

我有以下(模擬)表下面。我的實際表格有更多列。

TableA: 

ID | color | feel | size | alive | age 
------------------------------------------ 
1 | blue | soft | large | true | 36 
2 | red | soft | large | true | 36 
2 | blue | hard | small | false | 37 
2 | blue | soft | large | true | 36 
2 | blue | soft | small | false | 39 
15 | blue | soft | medium | true | 04 
15 | blue | soft | large | true | 04 
15 | green | soft | large | true | 15 
40 | pink | sticky | large | true | 83 
51 | brown | rough | tiny | false | 01 
51 | gray | soft | tiny | true | 59 
34 | blue | soft | large | true | 02 

我想要的結果看起來像:

Result of query on TableA: 

ID | color | feel | size | alive | age 
------------------------------------------- 
1 | blue | soft | large | true | 36 
2 | red | soft | large | true | 36 
15 | blue | soft | medium | true | 04 
40 | pink | sticky | large | true | 83 
51 | brown | rough | tiny | false | 01 
34 | blue | soft | large | true | 02 

我想每一個獨特的ID列一列,但我不希望檢查其他列。我需要結果集中返回的其他列,但我不想過濾它們。我只需要每行一個唯一的ID - 我不關心哪一行。

在我的例子中,我選擇了每個唯一ID的第一行。

我已嘗試的我已經和max和/或最小的功能與組看出

select * 
from TableA 
group by ID having ID = max(ID) 

大多數示例變型僅涉及2列。但是,我有更多的專欄。

我也看過使用CTE的例子,但我沒有使用SQL Server(我正在使用Sybase)。

我該如何實現描述的結果集?

編輯

我們在使用Sybase 15.1版。

回答

0

有很多種方法可以做到這一點。如果有Sybase的一個較新的版本,你可以使用row_number()

select t.* 
from (select t.*, row_number() over (partition by id order by id) as seqnum 
     from table t 
    ) t 
where seqnum = 1; 
+0

我們部門正在升級到15.1 ... :(我沒有在這些文檔中看到row_number:http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc01087.1510/pdf/ iqnew.pdf – Josh

+0

sybase是否支持這個?這看起來像MS SQL SERVER –

+0

要澄清,這不適用於我們使用的Sybase版本(15.1)。 – Josh

0

的解決方案,我想出瞭如下。

「感覺」像一個可憐的解決方案 - 我仍然接受新的答案:

SELECT 
    ID, 
    min(color), 
    min(feel), 
    min(size), 
    min(alive), 
    min(age) 
FROM TableA 
group by ID 

我不喜歡我是多麼冗長與min功能,每列的應用程序,但這個回報所需的結果集。

+1

但是這會將來自不同行的值放在同一行上。似乎沒有多大意義。如果你絕對*不關心那些列的內容,但是需要返回一些東西,那麼你可以返回NULL。 –