【问题标题】:How to Count tickets as DateWise如何将门票计为 DateWise
【发布时间】:2011-01-03 00:36:41
【问题描述】:

我对我的报告有疑问,报告格式如下

**Date**           **Received**        **Closed**        **Pending**  
12/01/10              1000                 900               100
12/02/10              2000                1000              1000
12/03/10              1500                1300               200

以上报告按日期显示服务台工单已收到、已关闭、待处理。

如何创建动态 SQL 查询以显示上述结果?

  • 收到的票在 SubmitedDate 计算
  • 已关闭的工单在 ClosedDate 计算,状态为“已关闭”
  • 状态为“待处理”的待处理工单也是如此。

请提供想法或一些示例 SQL 查询。

【问题讨论】:

  • 你能发布你的表结构吗?

标签: sql sql-server tsql


【解决方案1】:

分别编写接收的、关闭的和待处理的查询,然后像这样将它们连接在一起:

SELECT r.[Date], r.Count As Received, c.Count As Closed, p.Count AS Pending
FROM
   ( /* Received query here */ ) r
FULL JOIN 
   ( /* Closed query here */) c ON c.[Date] = r.[Date]
FULL JOIN
   ( /* Pending query here */) p ON p.[Date] = r.[Date]

我选择了完全联接,因为您不希望任何时候都出现零结果来强制从结果中剔除一行。

【讨论】:

  • 感谢乔尔,它完美地工作。但唯一的问题是查询需要时间来显示数据,因为如果我选择一月到十二月,则日期明智的选择然后查询需要 3 分钟但显示正确的数据。
  • @Iftikhar 如果您当前存储确切的时间戳,您可以通过将计算列添加到表中以仅存储关闭/待处理/提交的日期(列的归零时间部分)来提高性能。这样,sql server 会在插入时预先计算查询中最昂贵的部分。
  • 嗨乔尔,我正在使用视图从数据库中获取状态数据,因为在服务台系统中有许多类型的工作,如事件、问题、任务、工作订单,这些工作保存在各种表中,所以我可以在这里做什么我为事件、问题、任务、工作订单创建四个视图,然后创建一个视图以集体获取所有工作信息。在上述查询中,我使用此视图来获取数据。所以请保持这种情况,然后告诉我提高性能的最佳方法是什么。我
【解决方案2】:

用途:

  SELECT CONVERT(VARCHAR, t.submitteddate, 101) AS [date].
         COUNT(t.submitteddate) AS received
         SUM(CASE WHEN t.status = 'closed' THEN 1 ELSE 0 END) AS closed,
         SUM(CASE WHEN t.status = 'pending' THEN 1 ELSE 0 END) AS pending
    FROM YOUR_TABLE t
GROUP BY CONVERT(VARCHAR, t.submitteddate, 101)
ORDER BY [date]

如果您想查看没有售出的日期,您将不得不派生一个日期表,然后根据日期将上面的查询 LEFT JOIN。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多