0

我知道有一个与此标题相同的问题,但我不确定它是否解决了我的问题。

我的数据如下所示:

ID     Current    Nxt  
1      1A          1B
1      1B          1C
2      2A          2B
3      3A          3B
3      3B

在 Excel '=COUNTIF($B$2:$B$6,C2)' 中使用 countif 我可以让数据看起来像这样(公式在发生的列中):

ID     Current    Nxt  Occurred
1      1A          1B  1 
1      1B          1C  0 
2      2A          2B  0
3      3A          3B  1 
3      3B              0 

基本上,我只是想指出 Nxt 预定事件是否实际发生(如果它存在于数据中,则表明它)。

但是,我想在我的 SQL 查询中复制它,如下所示:

SELECT
ID,
Current,
Nxt

FROM
Table

我认为答案可能在于做类似的事情:

sum(case when Current='1B' THEN 1 ELSE 0 END) over (partition by Current)

如此处所建议:Sql Server 等效于 COUNTIF 聚合函数。以上适用于一条记录,但问题是我需要使标准引用 Nxt 列的内容,而不是对其进行硬编码,因为以下内容不起作用:

sum(case when Current=Nxt THEN 1 ELSE 0 END) over (partition by Current)

我想这是因为 Current 和 Nxt 实际上从来没有连续匹配?

作为参考,我的数据库使用 Oracle 11。

4

2 回答 2

1

试试这个 :

SELECT id
      ,current
      ,nxt
      ,nvl2(nxt,decode(next,lead(current) over (partition by id order by id),1,0),0) occured
  FROM yourtable
于 2013-10-03T12:00:50.760 回答
1

我建议您执行以下操作:

SELECT id, current, nxt
  FROM (SELECT id, current, nxt,
               CASE lead(current)
                       over (partition by id order by id)
                  WHEN nxt THEN 1
                  ELSE 0
               END AS occured
          FROM myTable)
 WHERE occured = 1;

编辑 :

小提琴演示

于 2013-10-03T12:09:10.963 回答