在CASE
语句中我使用了子查询,在子查询中我们想要一个列以及自动序列值或计数器值。例如 - 在CASE
语句中查询是这样的,我们在col1
条件中将一列作为WHERE
传递并获得col2
和CNT
的输出。
(CASE WHEN (SELECT COL2, ROWNUM AS CNT FROM TAB1 WHERE COL1 = COL1) THEN ....)
只要任何值col1
匹配,那么col2
的输出将与CNT
的增量值一起生成。
CNT
在这里是计数器值,如1,2,3,4,.....哪一个是更好的选择使用计数器或序列。
“哪一个更好的选择是使用计数器还是序列。”
你是否一直希望CNT从1
开始?如果是这样,您不需要序列。
为CNT生成值有多种不同的方法。最简单的是使用rownum
伪列:
SELECT COL1, rownum as CNT FROM TAB1 WHERE
当你不关心给定的行是1
,2
还是99999
时,这是一个很好的解决方案。如果您有一些特殊要求,您可能需要使用像row_number()
这样的分析函数:
SELECT COL1, row_number() over (order by COL2) as CNT FROM TAB1 WHERE
通常,“更好”取决于您尝试做什么。
有几种可能的情况:
rownum
和各种分析行编号函数,row_number()
,rank()
和dense_rank()
由于您的查询是如何构造的,因此您可能应该使用此方法。