SQL中配对列的前2位

时间:2013-07-22 10:07:45

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2

 PortPair   caspid  por POD teu ton
  P1-P2        5    P1  P2  9   5000
 P3-P4         5    P3  P4  10  5500
 P1-P2         4    P1  P2  7   4000
 P1-P2         3    P1  P2  5   3000
 P3-P4         3    P3  P4  6   3500
 P3-P4         2    P3  P4  7   4500
 P1-P2         1    P1  P2  3   2500

这里我有一张桌子,我想得到每个PortPair前2个记录的输出。 out put就像下面的

 Por    pod PortPair caspID  teu     ton
  P1    P2  P1-P2     5        9    5000
  P1    P2  P1-P2     4        7    4000
  P3    P4  P3-P4     5       10    5500
  P3    P4  P3-P4     3        6    3500

没有想到如何查询我的输出表..

任何人都可以帮忙

1 个答案:

答案 0 :(得分:1)

试试这个

;WITH cte AS
(
   SELECT 
       ROW_NUMBER() OVER(PARTITION BY PortPair ORDER BY CASPID DESC ) AS rno,
       Por  ,  
       pod, 
       PortPair, 
       caspID , 
       teu   ,  
       ton
   FROM tableName
}

SELECT Por  ,  pod, PortPair, caspID , teu   ,  ton
FROM cte 
WHERE rno<=2

根据您的partitioningpair,我们ordering基于适当的列按降序排列。这样我们就可以选择前两对了。