簡體   English   中英

oracle查詢交替記錄

[英]oracle query alternating records

我有一個看起來像這樣的表:

SEQ     TICKER     INDUSTRY
1        AAPL        10
1        FB          10
1        IBM         10
1        CSCO        10
1        FEYE        20
1        F           20
2        JNJ         10
2        CMPQ        10
2        CYBR        10
2        PFPT        10
2        K           20
2        PANW        20

我需要的是具有相同行業代碼的記錄,以在1和2記錄之間進行交替:

1   AAPL   10
2   IBM    10
1   FB     10
2   CSCO   10
1   FEYE   20
2   PANW   20

因此,基本上,按相同的行業代碼分組,在1條和2條記錄之間交替。

不知道如何。

使用分析函數創建一個針對每個組(行業和序列)重新開始的行號,然后按該行號進行排序。

select seq, ticker, industry
    ,row_number() over (partition by industry, seq order by ticker)custom_order
from stocks
order by industry, custom_order, seq;

有關完整示例,請參見此SQL Fiddle (它與您的示例結果不完全匹配,但是您的示例結果不正確,或者這個問題我不理解。)

沒有看到您如何得出示例結果,但結果如下:

| SEQ | TICKER | INDUSTRY |
|-----|--------|----------|
|   1 |   AAPL |       10 |
|   2 |   CMPQ |       10 |
|   1 |   CSCO |       10 |
|   2 |   CYBR |       10 |
|   1 |     FB |       10 |
|   2 |    IBM |       10 |
|   1 |    JNJ |       10 |
|   2 |   PFPT |       10 |
|   1 |      F |       20 |
|   2 |   FEYE |       20 |
|   1 |      K |       20 |
|   2 |   PANW |       20 |

使用此查詢產生的,其中(我假設)您要為您計算SEQ列:

select
       1 + mod(rn,2) Seq
     , ticker
     , industry
from (
      select
             ticker
           , industry
           , 1+ row_number() over (partition by industry
                                   order by ticker) rn
      from stocks
     ) 
order by industry, rn

請注意,這是喬恩·海勒(Jon Heller)先前回答的衍生產品,可以在http://sqlfiddle.com/#!4/088271/1上在線找到該衍生產品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM