【问题标题】:How do I have sorted column names based on a condition?如何根据条件对列名进行排序?
【发布时间】:2014-10-30 07:28:06
【问题描述】:

我有一个包含以下列的表格-

  • 事件 ID (varchar)
  • 创建日期(varchar- eg- '01-OCT-2014')
  • 状态(varchar- eg- 'open','closed')

我需要根据状态和从创建日期开始的日期范围来统计事件。

例如。

Date Range       || Open          || Closed ||
1-2 days         ||         5     ||       6 ||
2-5 days         ||         4     ||       8 ||
5-15 days        ||         10    ||       15 ||

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 日期范围是如何计算的?是从创建日期到今天的时间吗?
  • 是的,Barmar,没错。

标签: database oracle10g oracle-sqldeveloper rdbms


【解决方案1】:
SELECT CASE WHEN DATEDIFF(created_date, now()) BETWEEN 1 AND 2
                THEN '1-2 days'
            WHEN DATEDIFF(created_date, now()) BETWEEN 3 AND 5
                THEN '3-5 days'
            WHEN DATEDIFF(created_date, now()) BETWEEN 6 AND 15
                THEN '6-15 days'
            ELSE '> 15 days'
        END AS DateRange,
        SUM(CASE WHEN Status = 'open' THEN 1 ELSE 0 END) AS Open,
        SUM(CASE WHEN Status = 'closed' THEN 1 ELSE 0 END) AS Closed
FROM YourTable
GROUP BY DateRange

【讨论】:

  • 它在 Status = 'open' 处显示“缺少右括号”。我可能错过了什么?
  • 您使用的是 MySQL 还是 Oracle?我的答案应该适用于 MySQL。
  • 甲骨文。对不起,如果 mysql 标签误导了你。当我提出问题时,它是自动建议的。
  • 我不是 Oracle 用户,但我认为我已经修复了 SUM 表达式,因此它们可以在 Oracle 中工作。
  • 请参阅 community.oracle.com/thread/2459688?tstart=0 了解如何将 DATEDIFF 转换为 Oracle。
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 2017-02-28
相关资源
最近更新 更多