我目前正在使用ROW_NUMBER()和Order by子句来生成序列号(seq_num)以进行过滤。
SELECT ROW_NUMBER ()
OVER (
ORDER BY A.CARMODEL)
AS seq_num,
'A' AS SALES_CATEGORY,
'1000' AS SALES_TARGET
如果我希望有一个预定义的CARMODEL列表在seq_num方面具有更高的优先级,那可能吗?我应该如何实现?
例如:
1 A CAR1 1000
2 A CAR2 1000
3 A CAR3 1000
4 A CAR4 1000
5 A CAR5 1000
6 A CAR6 1000
就seq_num(较高的pirority)而言,我将需要CAR1和CAR2始终位于顶部(seq_num = 1和seq_num = 2),然后其余部分将遵循seq_num 3、4、5、6并开始。 / p>
答案 0 :(得分:2)
使用大小写表达式来影响顺序,下面是一个示例:
SELECT
ROW_NUMBER() OVER (ORDER BY
case when A.CARMODEL IN('car1','car2') then 1 else 2 end
, A.CARMODEL)
AS seq_num
, 'A' AS SALES_CATEGORY
, '1000' AS SALES_TARGET
FROM x
或:
SELECT
ROW_NUMBER() OVER (ORDER BY
case when A.CARMODEL = 'car1' then 1
A.CARMODEL = 'car2' then 2
else 3 end
, A.CARMODEL)
AS seq_num
, 'A' AS SALES_CATEGORY
, '1000' AS SALES_TARGET
FROM x