【问题标题】:How to get count for different values in different columns in SQL如何获取 SQL 中不同列中不同值的计数
【发布时间】:2016-07-06 23:21:17
【问题描述】:

我有一个像下面这样的图表

+----------------------------------------------------------+
|  ID | REGION | STATUS | CLOSED_DT |HEALTH  | Open_DT     |
+----------------------------------------------------------+
|   1 | QA     | open   |  -        |  red   | 2016-01-03  |
|   2 | QA     | open   |  -        | green  | 2015-03-03  |
|   3 | QA     | open   |  -        | orange | 2016-02-03  |
|   4 | QA     | open   |  -        | red    | 2016-01-03  |
|   5 | x      | closed |  16-03-03 | green  | 2015-06-03  |
|   6 | Req    | open   |  -        | orange | 2015-05-03  |
|   7 | x      | closed |  16-02-02 | green  | 2015-05-03  |
+----------------------------------------------------------+

我想显示三个图表——条形图、饼图、月趋势图。第一个图表需要计算不同区域的开放状态。

从 STATUS='open' 按区域分组的图表中选择区域,将 (*) 计数为总数;

我将上述查询用于条形图。对于饼图,我使用了以下查询

从 STATUS='open' group by health 的图表中选择健康,计数 (*) 作为总数;

接下来是按月显示的图表,我需要在其中显示过去十二个月例如从 1 月到 12 月,我需要每个月的打开和关闭次数。如何构建查询以获取从当前日期开始过去十二个月的打开和关闭状态的计数。另外,不是为每个图表执行三个不同的查询,有什么方法可以使用单个查询。我需要同时查询 Oracle 和 Mssql

【问题讨论】:

  • 您应该使用您实际使用的数据库标记问题。为什么需要 Oracle 和 SQL Server?
  • 其实我正在使用 oracle 和 mssql 。我需要显示 oracle 和 mssql 中的数据图表。这就是为什么标记两者。对于 2 个系统,我需要显示图表

标签: sql sql-server oracle


【解决方案1】:

你应该使用条件聚合:

SELECT to_char(Open_DT,'YYYY') as yearCol, to_char(Open_DT,'MM') as MonthCol,
       count(CASE WHEN status = 'open' then 1 end) as openCnt,
       count(CASE WHEN status = 'closed' then 1 end) as closeCnt
FROM YourTable
WHERE Open_DT >= add_months(sysdate,-13) 
GROUP BY to_char(Open_DT,'YYYY'),to_char(Open_DT,'MM')

你同时标记了sql-server和oracle,上面的解决方案是针对oracle的

对于 sql 服务器:

SELECT year(Open_DT) as yearCol, month(Open_DT) as MonthCol,
       count(CASE WHEN status = 'open' then 1 end) as openCnt,
       count(CASE WHEN status = 'closed' then 1 end) as closeCnt
FROM YourTable
WHERE Open_DT > DATEADD(month,-13,getdate())
GROUP BY year(Open_DT),month(Open_DT)

【讨论】:

  • 如何获取从今天开始的最近 13 个月,然后在查询中使用它
  • 对于每个图表来说,单独查询更好还是单个查询更好?
  • 取决于很多事情,但是是的,我相信对每个图表单独查询会更好。 @hemamalini
  • 非常感谢。以上查询有效。但是假设如果我一个月(13 个月内)没有任何数据,例如,在 2015 年 12 月,我没有任何打开和关闭的事件,我应该得到像 2015 年 12 月的打开和关闭计数为零。但以上查询我没有得到十二月本身
  • 有什么方法可以获取这些数据吗?
猜你喜欢
  • 1970-01-01
  • 2022-10-08
  • 2017-08-25
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多