2009-04-20 23 views
2

我有以下兩個PL/SQL的Oracle查詢返回的計數:返回多個計數單PL SQL查詢

SELECT count(*) 
    INTO counter_for_x 
    FROM Table_Name 
WHERE Column_Name = 'X'; 

SELECT count(*) 
    INTO counter_for_y 
    FROM Table_Name 
WHERE Column_Name = 'Y'; 

是否可以寫一個返回兩個數,並填充相應的單個查詢計數器變量?

回答

8
SELECT (
     SELECT COUNT(*) 
     FROM table_name 
     WHERE column_name = 'X' 
     ), 
     (
     SELECT COUNT(*) 
     FROM table_name 
     WHERE column_name = 'Y' 
     ) 
INTO counter_for_x, counter_for_y 
FROM dual 
1

可以,但我不會做...

select nvl(sum(decode(column_name,'X',1,0)),0), nvl(sum(decode(column_name,'Y',1,0)),0) 
    into counter_for_x, counter_for_y 
    from table_name 
    where column_name in ('X', 'Y'); 
1

的另一種方式。

SELECT 
    Max(CASE WHEN Column_Name = 'X' THEN Count ELSE NULL END) AS Count_X , 
    MAX(CASE WHEN Column_Name = 'Y' THEN Count ELSE NULL END) AS Count_Y 
FROM 
(
    SELECT count(*) as Count, Column_Name 
    FROM Table_Name 
    Where Column_Name in ('X', 'Y') 
    Group By Column_Name 
) AS InnerTable 
1

這將做到這一點:

select count(decode(column_name,'X',1)) x_count 
,  count(decode(column_name,'Y',1)) y_count 
into counter_for_x, counter_for_y 
from table_name 
where column_name in ('X','Y'); 

,或者如果你喜歡使用CASE:

select count(case when column_name = 'X' then 1 end) x_count 
,  count(case when column_name = 'Y' then 1 end) y_count 
into counter_for_x, counter_for_y 
from table_name 
where column_name in ('X','Y');