在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中显示当年和上一年的列的主要内容,如果未能解决你的问题,请参考以下文章