【发布时间】:2020-04-07 09:43:15
【问题描述】:
我的目标类似于下表:
Key | Count since date X | Count total
1 | 4 | 28
通过两个简单的选择,我可以获得这个值:(表的键由 3 列组成 [t$ncmp, t$trav, t$seqn])
1. SELECT COUNT(*) FROM db.table WHERE t$date >= sysdate-2 GROUP BY t$ncmp, t$trav, t$seqn
2. SELECT COUNT(*) FROM db.table GROUP BY t$ncmp, t$trav, t$seqn
我怎样才能加入这些陈述?
我尝试了什么:
SELECT n.t$trav, COUNT(n.t$trav), m.total FROM db.table n
LEFT JOIN (SELECT t$ncmp, t$trav, t$seqn, COUNT(*) as total FROM db.table
GROUP BY t$ncmp, t$trav, t$seqn) m
ON (n.t$ncmp = m.t$ncmp AND n.t$trav = m.t$trav AND n.t$seqn = m.t$seqn)
WHERE n.t$date >= sysdate-2
GROUP BY n.t$ncmp, n.t$trav, n.t$seqn
我尝试了不同的变体,但总是出现“缺少分组依据”或“未知限定符”之类的错误。 现在这至少会执行,但总数始终为 2。
T$TRAV COUNT(N.T$TRAV) TOTAL
4 2 2
29 3 2
51 1 2
62 2 2
16 1 2
....
如果有关系,我将把它作为一个从 MSSQLSERVER 到 Oracle-DB 的 OPENQUERY 运行。
【问题讨论】:
-
我会试试
GROUP BY n.t$trav, m.total。您通常 GROUP BY 与您选择的列相同,除了那些作为设置函数的参数的列。 -
@jarlh omg 是的,就是这样!谢谢你!有时这是显而易见的事情:D您可以将其发布为答案,我会接受它:D