【问题标题】:SQL - One Table with Two Date Columns. Count and JoinSQL - 一个包含两个日期列的表。计数并加入
【发布时间】:2020-11-25 19:38:30
【问题描述】:

我有一个包含以下列的表 (vOKPI_Tickets):

|创建日期 |完成日期|

我想对这些列中的每一列进行计数,并按日期对它们进行分组。完成后应该是这样的:

|日期 |计数创建 |计数完成 |

通过执行以下操作,我可以单独获取每个计数:

SELECT COUNT(TicketId)
FROM vOKPI_Tickets
GROUP BY CreationDate

SELECT COUNT(TicketId)
FROM vOKPI_Tickets
GROUP BY CreationDate

如何将输出合并到一张表中?我还应该注意,这将成为一个视图。

提前致谢

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 两个日期都可以为空吗?
  • @Andrew,是的,有可能

标签: sql sql-server date count unpivot


【解决方案1】:

简单的通用方法:

select
coalesce(crte.creationdate, cmpl.CompletionDate) as theDate,
crte.cnt as created,
cmpl.cnt as completed
from
(select creationdate, count (*) as cnt from vOKPI_Tickets where creationdate  is not null group by creationdate) crte
full join
(select CompletionDate, count (*) as cnt from vOKPI_Tickets where CompletionDate  is not null group by CompletionDate) cmpl
on crte.creationdate  = cmpl.CompletionDate  

【讨论】:

  • 到目前为止这似乎有效。我会做一些测试,然后回来标记答案。谢谢!
【解决方案2】:

您可以取消透视和聚合。一个通用的方法是:

select dte, sum(created), sum(completed)
from ((select creationdate as dte, 1 as created, 0 as completed
       from vOKPI_Tickets
      ) union all
      (select completed as dte, 0  created, 1 as completed
       from vOKPI_Tickets
      ) 
     ) t
group by dte;
  

【讨论】:

    【解决方案3】:

    在 SQL Server 中,您可以为此使用 cross apply

    select d.dt, sum(d.is_completed) count_created, sum(d.is_completed) count_completed
    from vokpi_tickets t
    cross apply (values (creationdate, 1, 0), (completion_date, 0, 1)) as d(dt, is_created, is_completed)
    where d.dt is not null
    group by d.dt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多