在oracle中显示当年和上一年的列

Posted

技术标签:

【中文标题】在oracle中显示当年和上一年的列【英文标题】:Show columns of current year and previous year in oracle 【发布时间】:2016-03-23 09:27:06 【问题描述】:

我需要在 oracle 中显示按特定等级评定的当年和上一年的客户。例如。列是等级,客户以当年的特定等级评级,客户以上一年的特定等级评级。等级应该是分组,客户应该显示总数。如果没有客户,则应该打印 0。

上面的截图是预期的输出。到目前为止,我只有 > 2016 年 1 月 1 日的当年客户。我无法创建查询来同时带来上一年的客户。

我今年的客户查询是:

SELECT Rating , count(customers) as Curr_year_Custs from Rated_Customers where Rated_year > = '2016' group by Rating;

【问题讨论】:

你对这个网站并不陌生,所以我真的不必告诉你这还不够信息!请使用表格结构、数据和预期输出编辑您的问题。 @sagi 我应该添加更多关于这个问题的信息吗? 是的,这是什么输入的预期输出?... 嗯,输入是一个连接查询,它带来了当前年份的特定等级的客户总数。 您应该发布该数据,以便我们了解您是如何获得结果的。 【参考方案1】:
SELECT grade,
       COUNT( DISTINCT CASE WHEN DATE '2015-01-01' >= date_column
                             AND date_column < DATE '2016-01-01'
                            THEN customer_id END
            ) AS number_of_unique_customers_in_2015,
       COUNT( DISTINCT CASE WHEN DATE '2016-01-01' >= date_column
                             AND date_column < DATE '2017-01-01'
                            THEN customer_id END
            ) AS number_of_unique_customers_in_2016
FROM   Customers
WHERE  Date_Column >= DATE '2015-01-01'
AND    Date_Column <  DATE '2017-01-01'
GROUP BY grade;

【讨论】:

嗨@MTO 非常感谢它的工作反馈。不明白为什么你把'where'放在主查询的末尾? 如果您有适当的索引,那么您可以过滤结果集以仅考虑那些在您感兴趣的范围之间的行。如果您没有 WHERE 子句,那么您的查询可能会考虑回溯多年的行,这些行超出了您的要求范围,只会导致数据库不必要的工作。

以上是关于在oracle中显示当年和上一年的列的主要内容,如果未能解决你的问题,请参考以下文章

Oracle sqlplus 语法

为啥oracle数据库链接不显示来自sql server的图像类型的列

如何在 Apex 交互式报表的列数据中显示新行

oracle只显示不为空的列

oracle中的列到行

串联 - 名字和姓氏相同的列 (Oracle SQL)