簡體   English   中英

如果count> n,則Oracle SQL View列值1

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM