我想通过他们的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
我认为这必须通过一个子选择来完成,对吧?但是这看起来怎么样?
答案 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)
使用RefID
和OrderNum
按结果排序。使用ASC
和DESC
进行正确排序(默认为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
中的示例结果
答案 3 :(得分:0)
你想要Ordernum关于RefID,我想它可能会根据你给出结果: -
select * from products
order by RefID,OrderNum