2009-02-12 37 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

相关问题