2012-03-16 100 views
1

一个相当愚蠢的问题。我有一个带有产品的Oracle Db,现在读出了前10个产品。PL/SQL中的增量变量/计数器选择结果

我现在想下面显示

1 Product A 
2 Product XY 
3 Product B 

愚蠢的问题,而是如何让前面的柜台?我显然必须增加,但我不明白这是如何工作的。我也想过使用WITH和tmp表,但无法弄清楚需要如何设置。

SELECT POS ???, PRODUCTNAME FROM TBLPRODUCT 

我对PL/SQL不是很熟悉。有人可以给我一个提示吗?非常感谢。

回答

7

ROWNUM是Bob所示的一种方法,但如果您使用的是更复杂的查询 - 尤其是在您明确排序行的情况下 - 它可能不会提供您想要的结果。

如今,解析函数通常是一个更好的方法,因为你必须在订货明确的控制:

SELECT ROW_NUMBER() OVER (ORDER BY productname), productname 
    FROM tableproduct 
    ORDER BY productname 

注意,这决定了行号行的顺序是从整体结果的排序分开组。在这个例子中,我使用了与您可能想要的顺序相同的顺序,但值得注意的是,这给了您更多的灵活性。

(和为是有点迂腐道歉,但这无关PL/SQL,这是一个嵌入Oracle中的程序语言,这简直是对Oracle的SQL实现。)

+2

+1,有如果您传递的信息使事情变得更加清晰,并更好地理解OP,那么没有什么不好的做法。 – Ollie 2012-03-16 11:59:51

+0

谢谢你的解决方案。这是非常有趣的,并再次向我展示了所有我不知道的东西:(但是,我刚刚意识到,我只想看到前10个,但是由于某种原因,现在我说WHERE ROWNUM <= 10比这个不行正确,它显示我错误的数据。任何想法?哦,对不起,我使用了错误的标记... – Luka 2012-03-16 12:30:36

+0

@Luka - 看看这个例子做一个在Oracle中正确的前n查询:http:/ /stackoverflow.com/questions/6858325/oracle-top-n-ordered-rows。如果这不能给你足够的信息来解决你的问题,请告诉我。 – 2012-03-16 12:52:09

5

使用ROWNUM,如

SELECT ROWNUM, PRODUCTNAME FROM TBLPRODUCT 

分享和享受。