【问题标题】:output need to achieve by one query输出需要通过一个查询来实现
【发布时间】:2021-04-05 03:40:12
【问题描述】:

我有一个包含如下数据的表格。

Tran_id      status
abc            d
xyz            f
mnp            d
klm            s 
anz            f

我需要枢轴输出:

Total No Of d: 2
Total No Of f: 2
Total No. Of s: 1
Total no Of Status : 5

我可以通过单独的查询轻松实现,但是否可以通过一个查询完成?

【问题讨论】:

    标签: sql oracle count pivot aggregate-functions


    【解决方案1】:

    您不是在描述一个数据透视表,而是一个带有汇总的聚合查询。看起来像:

    select status, count(*) as cnt
    from mytable
    group by rollup (status)
    

    【讨论】:

      【解决方案2】:

      你可以使用条件聚合比如

      SELECT SUM(CASE WHEN status='d' THEN 1 ELSE 0 END) AS "Total # Of D",
             SUM(CASE WHEN status='f' THEN 1 ELSE 0 END) AS "Total # Of F",
             SUM(CASE WHEN status='s' THEN 1 ELSE 0 END) AS "Total # Of S",
             COUNT(*) AS "Total # Of Status"
        FROM tab
      

      为了返回旋转的结果。

      【讨论】:

        【解决方案3】:

        您还可以在 group by 子句中使用 grouping sets 子句来创建自己的 group by 子集,如下所示

        select 'Total No Of '||nvl(to_char(status), 'Status') ||': '|| count(*)
        from your_tab
        group by grouping sets (status, ())
        ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多