[英]Oracle SQL View Column value 1 if count > n
我试图建立一个应该看起来像这样的视图:
CREATE OR REPLACE VIEW TestView AS
SELECT
p.name,
?? (select count(*) from Test t where t.currentstate in ('Running', 'Ended') and t.ref = p.key) as HasValues
from ParentTable p
我想将HasValues列设为1或0。如果当前状态的计数大于0,则返回1。
有人可以告诉我该怎么做吗? 谢谢
CREATE OR REPLACE VIEW TestView AS
SELECT
p.name,
case
when nvl(t.mycount,0) > 0 then '1'
else '0'
end HasValues
from ParentTable p
left outer join (select ref, count(*) mycount from Test group by ref) t on t.ref = p.key
如果对于父表中的每一行,测试表中可能有很多行,并且索引了测试表上的连接键,则将查询构造为以下方式可能是最有效的:
CREATE OR REPLACE VIEW TestView AS
SELECT
p.name,
(select count(*)
from Test t
where t.currentstate in ('Running', 'Ended') and
t.ref = p.key and
rownum = 1) as HasValues
from ParentTable p;
对于此查询,HasValues将始终为0或1。
如果测试表和父表之间的行比小于10:1, 并且我想对父表中的所有行运行该比率,那么我将按照StevieG的答案将两个表连接在一起
-- This has the added advantage that it doesn't count all records,
-- it only needs to see one.
CREATE OR REPLACE VIEW testview
AS
SELECT p.name
, CASE
WHEN EXISTS
(SELECT NULL
FROM test t
WHERE t.currentstate IN ('Running', 'Ended')
AND t.REF = p.key)
THEN
1
ELSE
0
END
hasvalues
FROM parenttable p
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.