我有一个看起来像这样的表:
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和1之间交替。 2条记录如下:
1 AAPL 10
2 IBM 10
1 FB 10
2 CSCO 10
1 FEYE 20
2 PANW 20
所以基本上,按照相同的行业代码分组,在1和1之间交替。 2条记录。
无法弄清楚如何。
答案 0 :(得分:0)
使用分析函数创建一个为每个组(行业和序列)重新开始的行号,然后按该行号排序。
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。 (它与您的示例结果不完全匹配,但是您的示例结果不正确或者我不明白这个问题的其他内容。)
答案 1 :(得分:0)
不要看你如何在你的问题中得到示例结果,但结果如下:
| 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
在线找到