2015-02-11 93 views
0

大家好,我的表看起来像我如何获得rowposition一个选择

Id Header Mo RefId 
1 Header2 45 1 
4 Header2 10 1 
7 Header1 1 5 
8 Header2 2 5 
9 Header3 77 5 
12 Header5 11 2 
13 Header9 55 5 
14 Header2 22 2 

如果我选择的所有记录where RefId 5

我想要的结果看起来像

Pos Header Mo RefId 
1 Header1 1 5 
2 Header2 2 5 
3 Header3 77 5 
4 Header9 55 5 

这里SQLFiddle为测试


更新

就像你可能会看到我试图从我得到的结果集的行位置,是有一些方法来做到这一点?如何高性能它将

我使用SQL Server 2008 R2的

+0

你使用哪个dbms? – 2015-02-11 14:43:40

+0

行位置?数据库中的行号?什么数据库?甲骨文? – 2015-02-11 14:44:17

+0

@NeillVerreynne我添加我的数据库 – WiiMaxx 2015-02-11 14:49:30

回答

1

这里是MSSQL 2008的方法。

SELECT row_number() over (order by (select null)) AS Pos, Header,Mo,RefId 
FROM Table1 
WHERE RefId =5 
+0

感谢您的回答,但不幸的是结果不匹配[SQLFiddel](http://sqlfiddle.com/#!3/5b01b/13)。你可能会看到我的Pos会从1到5,你的Pos是从3到7' – WiiMaxx 2015-02-11 14:58:04

+0

从我的部分的错误理解。更新了查询。此外,你只有4行RefId = 5,所以这个例子从1到4 – 2015-02-11 15:03:35

+0

啊是的,这是我的问题中的一个错字,其中我最终得到了5项作为结果:D – WiiMaxx 2015-02-11 15:05:49

1

既然你没有指定任何DBMS,在这里你可以如何与OracleMSSql

select * from (select row_number() over(order by id) as Pos, Header, Mo, RefId from yourTable) x; 

现在就做,这里你怎么可以做到这一点MySQL

SELECT @pos:[email protected]+1 AS Pos, Header, Mo, RefId 
    FROM yourTable 
    ORDER BY id; 
+0

谢谢,但不幸我使用MSSql – WiiMaxx 2015-02-11 14:50:48

+0

@ WiiMaxx我很确定oracle可以在MSSql上运行,试试吧。 – 2015-02-11 14:51:59

+0

这不起作用的原因是您没有在第一个查询中命名tabel。在分号前添加X,它会起作用 – 2015-02-11 15:05:07