2009-02-12 61 views
0

對不起,問這一點,但我飛奔的想法選擇頂部COLUMN1匹配COLUMN2

我有這個表:

[id] [pid] [vid] 
1  4  6844 
1  5  6743 
2  3  855 
2  6  888 
... 

如何我查詢這個eg.table得到結果如下:

[id] [pid] [vid] 
1  5  6743 
2  6  888 

我想獲得最高的[PID]爲[ID]與[VID]匹配這個[PID]

有什麼想法?

我使用MSSQL 2008

回答

1

我會使用Common Table Expressions(CTE)。這提供了大量的機會,像這樣:

WITH Result (RowNumber, [id], [pid], [vid]) 
AS 
(
    SELECT Row_Number() OVER (PARTITION BY [id] 
           ORDER  BY [vid] DESC) 
      ,[id] 
      ,[pid] 
      ,[vid] 
     FROM MyTable 
) 
SELECT [id] 
     ,[pid] 
     ,[vid] 
    FROM Result 
WHERE RowNumber = 1 
+0

爲您解決方案提供了更多的選擇,我會給你點! – 2009-02-13 07:20:24

4

單程

select t1.* from 
(select id,max(pid) as Maxpid 
from yourtable 
group by id) t2 
join yourtable t1 on t2.id = t1.id 
and t2.Maxpid = t1.pid 
+0

對不起,你剝奪了點:)但Bliek的解決方案是更加舒適,並提供了選擇多了很多...... – 2009-02-13 07:19:52

1

由於您使用的Microsoft SQL Server 2008,那麼我建議Common Table Expressionsthe OVER clause完成分割結果劃分爲組由編號爲,並返回每組中的第一排(由pid排序)。 Bliek的回答顯示了一種方法。

(此相同的基本方法,順便說一句,是更有效的分頁非常有用的,也是如此。)

沒有一個極其偉大的方式與「標準」 SQL做到這一點。在SQLMenace的答案中顯示的方法僅適用於可以將子查詢用作表的數據庫。例如,它可能是SQL Server 2000中完成此操作的一種方法,但可能無法在每個主流RDBMS中使用。

+0

SRY ......這是2008年MSSQL – 2009-02-12 14:45:33

相關問題