需要帮助以降序显示属性(Oracle SQL)

需要帮助以降序显示属性(Oracle SQL),sql,oracle,plsql,Sql,Oracle,Plsql,我正在编写一个oracle sql过程,列出前10个客户的客户订单。但是,需要的一个要求是按降序输出属性total price,这是我无法实现的。相反,输出按顺序键排序。需要任何帮助,使输出按总价降序排序。我也在尝试将日期完整打印出来,例如:1995年11月1日,而不是我目前得到的1995年11月1日 [现行守则] set linesize 100 set pagesize 200 set serveroutput on set line 256 -- -- Task 02 create or

我正在编写一个oracle sql过程,列出前10个客户的客户订单。但是,需要的一个要求是按降序输出属性total price,这是我无法实现的。相反,输出按顺序键排序。需要任何帮助,使输出按总价降序排序。我也在尝试将日期完整打印出来,例如:1995年11月1日,而不是我目前得到的1995年11月1日

[现行守则]

set linesize 100
set pagesize 200
set serveroutput on
set line 256
--
-- Task 02
create or replace procedure showCustomerOrders is
  previousCustomer CUSTOMER.c_custkey%type := -1;
begin
  for currentRow IN (select c_custkey,
                            c_name,
                            o_custkey,
                            o_orderdate,
                            o_orderkey,
                            o_totalprice
                       from customer
                       left outer join orders
                         on c_custkey = o_custkey
                      where c_custkey in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                      order by c_custkey,
                               c_name,
                               o_custkey,
                               o_orderkey,
                               o_orderdate,
                               o_totalprice DESC) loop
    if previousCustomer != currentRow.c_custkey then
      dbms_output.put_line(chr(10)); -- new line
      dbms_output.put_line(currentRow.c_custkey || ' - ' ||
                           currentRow.c_name || ':');
    end if;
    --
    if currentRow.o_custkey is not null then
      dbms_output.put_line(chr(9) ||
                           lpad(trim(to_char(currentRow.o_orderkey)), 12) || ', ' ||
                           lpad(trim(to_char(currentRow.o_orderdate)), 12) || ', ' ||
                           rpad(trim(to_char(currentRow.o_totalprice,
                                             '$999G999G999D99')),
                                14));
    end if;
    --
    previousCustomer := currentRow.c_custkey;
  end loop;
  dbms_output.put_line(null);
end;
/
show error
[当前输出]

1 - Customer#000000001:
          385825,    01-NOV-95, $254,563.49
          430243,    24-DEC-94, $37,713.17
          454791,    19-APR-92, $78,172.70
          579908,    09-DEC-96, $43,874.94
         1071617,    10-MAR-95, $156,748.63
         1374019,    05-APR-92, $189,636.00
         1590469,    07-MAR-97, $59,936.41
         1755398,    12-JUN-97, $1,466.82
         1763205,    28-AUG-94, $18,112.74

您只需要重新排列SQL语句,如

SELECT c_custkey, c_name, o_custkey, TO_CHAR(o_orderdate,'DD-Mon-YYYY') AS o_orderdate, 
       o_orderkey, o_totalprice
  FROM
  (
  SELECT c.*, o.*,
         DENSE_RANK() OVER (ORDER BY o_totalprice DESC) AS dr       
    FROM customer c
    LEFT JOIN orders o
      ON c_custkey = o_custkey
   )   
 ORDER BY dr
其中,您只需要在
orderby
列表中的
o_totalprice

如果DBMS的版本为
12+
,则直接使用
ORDER BY
列表中的分析功能:

SELECT c_custkey, c_name, o_custkey, TO_CHAR(o_orderdate,'DD-Mon-YYYY') AS o_orderdate,  
       o_orderkey, o_totalprice
  FROM customer c
  LEFT JOIN orders o
    ON c_custkey = o_custkey
 ORDER BY DENSE_RANK() OVER (ORDER BY o_totalprice DESC) 
 FETCH FIRST 10 ROWS ONLY

您只需要重新排列SQL语句,如

SELECT c_custkey, c_name, o_custkey, TO_CHAR(o_orderdate,'DD-Mon-YYYY') AS o_orderdate, 
       o_orderkey, o_totalprice
  FROM
  (
  SELECT c.*, o.*,
         DENSE_RANK() OVER (ORDER BY o_totalprice DESC) AS dr       
    FROM customer c
    LEFT JOIN orders o
      ON c_custkey = o_custkey
   )   
 ORDER BY dr
其中,您只需要在
orderby
列表中的
o_totalprice

如果DBMS的版本为
12+
,则直接使用
ORDER BY
列表中的分析功能:

SELECT c_custkey, c_name, o_custkey, TO_CHAR(o_orderdate,'DD-Mon-YYYY') AS o_orderdate,  
       o_orderkey, o_totalprice
  FROM customer c
  LEFT JOIN orders o
    ON c_custkey = o_custkey
 ORDER BY DENSE_RANK() OVER (ORDER BY o_totalprice DESC) 
 FETCH FIRST 10 ROWS ONLY

这不起作用,因为它真的把我的输出搞砸了。但是谢谢你告诉我,通过改变序列,我可以改变排序过程。到目前为止,oracle sql仍然非常陌生。Thx的帮助,这没有工作,因为它真的搞砸了我的输出。但是谢谢你告诉我,通过改变序列,我可以改变排序过程。到目前为止,oracle sql仍然非常陌生。谢谢你的帮助,谢谢你的帮助!这真的很有帮助。谢谢你的帮助!这真的很有帮助。