分组后将行值显示为列-Oracle

Posted

技术标签:

【中文标题】分组后将行值显示为列-Oracle【英文标题】:Display Row value as column after grouping- Oracle 【发布时间】:2014-01-10 05:33:50 【问题描述】:

这是我的查询

SELECT
  tbl_dtl_feature.customer_id,
  result,
  COUNT(*) AS expr1
FROM tbl_dtl_feature
WHERE tbl_dtl_feature.feature_id = 'F001'
      AND TRUNC(tbl_dtl_feature.start_datetime)
      BETWEEN TO_DATE('10/01/2014', 'DD/MM/YYYY') AND TO_DATE('10/01/2014', 'DD/MM/YYYY')
GROUP BY tbl_dtl_feature.result, tbl_dtl_feature.customer_id 

我的结果集:

CustomerID  Result  Count
----------  ------- -----
44438111    Success 3
44438444    Success 1
44438111    Failure 1

预期结果集:

CustomerID  Count(Success) Count(Failure)
----------  -------------- -------------
44438111       3              1
44438444       1              0

你能帮帮我吗?

【问题讨论】:

【参考方案1】:

这样试试,

SELECT t.customer_id, 
       count(CASE WHEN result = 'Success' THEN 1 END) Count_Success, 
       count(CASE WHEN result = 'Failure' THEN 1 END) Count_Failure
FROM   tbl_dtl_feature t
WHERE  t.feature_id = 'F001'
AND    trunc(t.start_datetime) BETWEEN to_date('10/01/2014', 'DD/MM/YYYY') AND to_date('10/01/2014', 'DD/MM/YYYY') 
GROUP BY t.customer_id;

【讨论】:

以上是关于分组后将行值显示为列-Oracle的主要内容,如果未能解决你的问题,请参考以下文章

将行值转换为列,并计算所有可能值 mysql 的重复次数

SQL将行转置为列(按键变量分组)?

如何将行显示为列?

Tsql 将行转置为列,按列分组

MySQL - 将行显示为列(尽可能简单)

将行值转换为火花数据框中的列数组