如何在oracle中生成查询聚合?

How to generate Query aggregation in oracle?

我正在编写一些代码,示例 table 如下所示。寻找一些查询的聚合输出

样本Table

col1    col2
----    ---- 
val1    Fully
val1    Partial
val2    NoService
val2    Partial
val3    Fully
val3    NoService
val3    Fully
val3    Partial
val1    Fully
val2    NoService

预期输出

Col1    Fully   Partial NoService   Total
----    -----   ------- ---------   ----- 
val1     2        1      0           3
val2     0        1      2           3
val3     2        1      1           4

不确定如何在 Oracle 中执行此操作?请有人帮忙

试试这个:它不是动态解决方案,但它会提供您期望的结果。如果你在 val2 中有固定值那么它是最好的,否则你必须选择动态方式。

SELECT col1,
    SUM(CASE WHEN col2 = 'Fully' THEN 1 ELSE 0 END) Fully,
    SUM(CASE WHEN col2 = 'Partial' THEN 1 ELSE 0 END) Partial,
    SUM(CASE WHEN col2 = 'NoService' THEN 1 ELSE 0 END) NoService,
    COUNT(col2) total
FROM yourTable
GROUP BY col1

在 Oracle 中,您可以通过 CASE:

使用数据透视表或聚合函数来执行此操作
SELECT COL1, 
  COUNT(CASE when COL2 = 'FULLY' THEN 1 ELSE 0 END) AS FULLY,
  COUNT(CASE when COL2 = 'PARTIAL' THEN 1 ELSE 0 END) AS PARTIAL
FROM TABLE_A A 
LEFT JOIN  TABLE_A B
  on B.COL1 = A.COL1
GROUP BY COL1

使用 oracle 中的数据透视查询函数试试这个

select * from(select nvl(col1,'Total') col1,nvl(col2,'Total') col2,count(1) cnt from mytable group by  CUBE(col1,col2))
pivot
(
     sum(cnt)
     for col2 IN
               (
                  'Fully'  AS "Fully",
                  'Partial'   AS "Partial",
                  'NoService' AS "NoService",
                  'Total' As "Total"
               )
)

从上面的查询中,我可以获得列和行的总数。

根据需要使用查询。