[英]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.