我知道有一个与此问题相同的问题,但我不确定它是否解决了我的问题。
我的数据如下:
ID Current Nxt
1 1A 1B
1 1B 1C
2 2A 2B
3 3A 3B
3 3B
在Excel中使用countif'= COUNTIF($ B $ 2:$ B $ 6,C2)'我可以将数据看起来像这样(公式在已发生的列中):
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 equivalent of a COUNTIF aggregate function。以上工作适用于一条记录,但问题是我需要使条件引用Nxt列的内容而不是硬编码,因为以下内容不起作用:
sum(case when Current=Nxt THEN 1 ELSE 0 END) over (partition by Current)
我想这是因为Current和Nxt实际上从来没有在一行上匹配?
作为参考,我的数据库使用Oracle 11。
答案 0 :(得分:1)
试试这个:
SELECT id
,current
,nxt
,nvl2(nxt,decode(next,lead(current) over (partition by id order by id),1,0),0) occured
FROM yourtable
答案 1 :(得分: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;
编辑: