我有一个表,看起来像这样:
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个记录之间交替。
不知道是怎么回事。
发布于 2018-04-18 14:17:07
使用分析函数为每个组(行业和序列)创建从头开始的行号,然后按该行号排序。
select seq, ticker, industry
,row_number() over (partition by industry, seq order by ticker)custom_order
from stocks
order by industry, custom_order, seq;有关完整示例,请参阅this SQL Fiddle。(它与您的示例结果不完全匹配,但是您的示例结果不正确,或者这个问题有其他我不明白的地方。)
发布于 2018-04-18 14:56:21
我不知道你是如何得出问题中的示例结果的,但这个结果是:
| 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在线找到
https://stackoverflow.com/questions/49890254
复制相似问题