4

私は1つのクエリで立ち往生しています、

ここで、週番号を取得してデータの週番号と比較することにより、sysdateに従って配置できる52週間のデータがあります。今私がやりたいことは、現在の週番号が10の場合、sysdateの週番号week10、week9、week8..........week11に応じて、すべての週を降順で並べたいということです。

このクエリで

select "Weekly","Quarter","SALES","Monthly",week_number from fiscal_calendar
where week_number <= TO_CHAR(TO_DATE(sysdate,'DD-mon-YYYY'),'iw') 
order by  week_number desc;

1 週目まではデータを並べ替えることができますが、11 週目に終了するようにシーケンスを続けたいので、何か間違ったことはありますか?アドバイスをお願いします

4

2 に答える 2

4

私が正しく理解しているなら、あなたは試すことができます

SELECT * FROM
(SELECT "Weekly","Quarter","SALES","Monthly",week_number FROM fiscal_calendar
  WHERE week_number <= TO_NUMBER(TO_CHAR(SYSDATE,'IW')) 
  ORDER BY  week_number desc) t1
UNION ALL
SELECT * FROM 
(SELECT "Weekly","Quarter","SALES","Monthly",week_number FROM fiscal_calendar
  WHERE week_number > TO_NUMBER(TO_CHAR(SYSDATE,'IW'))
  ORDER BY  week_number) t2

これは単純化された SQLFiddle の例です

于 2013-03-11T08:20:32.823 に答える
0

order by 句でcase()(または)を使用できます...decode()

order by case 
           when week_number = to_number(to_char(sysdate, 'WW')) then 1
           when week_number < to_number(to_char(sysdate, 'WW')) then 2
           when week_number > to_number(to_char(sysdate, 'WW')) then 3
         end ASC
         , week_number DESC
于 2013-03-11T09:02:32.507 に答える