【问题标题】:Return multiple counts with single PL SQL Query使用单个 PL SQL 查询返回多个计数
【发布时间】:2010-10-20 13:19:34
【问题描述】:

我有以下两个返回计数的 PL/SQL Oracle 查询:

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';

是否可以编写一个查询来返回计数并填充相应的计数器变量?

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      你可以,但我不会这样做......

      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');
      

      【讨论】:

        【解决方案3】:

        另一种方式。

        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
        

        【讨论】:

          【解决方案4】:

          这样就可以了:

          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');
          

          【讨论】:

            猜你喜欢
            • 2014-06-11
            • 1970-01-01
            • 1970-01-01
            • 2023-01-28
            • 2014-06-20
            • 2022-01-23
            • 2010-11-19
            • 1970-01-01
            相关资源
            最近更新 更多