关于他们的关系按两栏排序

时间:2015-08-18 06:22:41

标签: sql oracle sql-order-by

我想通过他们的Ordernum(唯一的)订购以下关于RefID(它们拥有相同的产品)和Oracle数据库上的SQL的东西:

必须首先按OrderNum排序,然后是每个具有相同RefID的产品。 OrderNum最低的行应该是第一个,然后是具有相同RefID的产品,之后是下一个更高的OrderNum,依此类推......

OrderNum    |   RefID   | ID
10          |   100     | 8
1           |   200     | 9
2           |   100     | 4
8           |   200     | 12
3           |   200     | 20
0           |   10      | 11

我尝试了什么以及什么给了我OrderNum订购的结果,而不是相同的RefID:

SELECT * FROM products
ORDER BY OrderNum, RefID

预期结果

0           |   10      | 11
1           |   200     | 9
3           |   200     | 20
8           |   200     | 12
2           |   100     | 4
10          |   100     | 8

我认为这必须通过一个子选择来完成,对吧?但是这看起来怎么样?

4 个答案:

答案 0 :(得分:2)

我相信Oracle支持CTE和窗口函数,所以类似下面的内容应该有效:

<xp:this.validators>                                    
    <!--    Validator for Attachments   -->
    <xp:validator validatorId="attachmentValidator">
    </xp:validator>
</xp:this.validators>

公用表表达式(CTE)与子查询类似,但我倾向于使用它们,所有其他条件相同 - 此查询没有特定优势,但它们可以可以多次重复使用,并且可以轻松地在以前的基础上构建,而不会引入大量嵌套。

答案 1 :(得分:1)

您按OrderNum订购并在每个OrderNum中按RefID排序,但您想要做的只是相反,即先按RefID订购,然后按OrderNum在每个RefID内订购:

SELECT * FROM products
ORDER BY RefID, OrderNum;

答案 2 :(得分:1)

使用RefIDOrderNum按结果排序。使用ASCDESC进行正确排序(默认为ASC):

select * from products
order by RefID DESC,OrderNum ASC

结果:

OrderNum    RefID   ID
-----------------------
1           200     9
3           200     20
8           200     12
2           100     4
10          100     8

SQL Fiddle

中的示例结果

答案 3 :(得分:0)

你想要Ordernum关于RefID,我想它可能会根据你给出结果: -

     select * from products
     order by RefID,OrderNum