【发布时间】:2013-10-03 11:47:48
【问题描述】:
我知道有一个与此标题相同的问题,但我不确定它是否解决了我的问题。
我的数据如下所示:
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。
【问题讨论】:
-
您的数据库看起来像一个伪装成关系数据库的网络数据库。你被这个数据结构困住了吗?如果是这样,您可以期望处理数据网络模型的所有缺点,同时支付与关系数据相关的所有成本。早在 1980 年代,我就看到过这样的数据结构,当时关系数据库是新事物,但我已经有 15 年没有看到它们了。
-
您的预期输出是什么?带有
Occured = 1的行? -
@WalterMitty - 抱歉,我不确定我是否理解这个问题。我只是一个报告作者,而不是数据库管理员。
-
@Rachcha - 是的,如果没有解释清楚,我们深表歉意。
-
那么我已经提供了我的答案。应该够了。