【问题标题】:SQL GROUP BY AggregateSQL GROUP BY 聚合
【发布时间】:2014-12-27 03:34:06
【问题描述】:

工单有一个 ID TicketNbr,时间条目有一个 ID Time_RecID。工单有 0 个、1 个或可能更多与 TicketNbr 关联的时间条目。

我正在尝试生成这样的列表:

Time Entries | Tickets
          10 | #
           9 | #
           8 | #
           7 | #
           6 | #
           5 | #
           4 | #
           3 | #
           2 | #
           1 | #

其中#是票数。

数据来自两个表:v_rpt_Service (TicketNbr) 和 v_rpt_Time (Time_RecID)。我的所有相关数据都是使用以下 SQL 发现的:

 SELECT
    s.TicketNbr, t.Time_RecID
FROM
    v_rpt_Service s
    LEFT JOIN v_rpt_time t on s.TicketNbr = t.SR_Service_RecID

我苦苦挣扎的是聚合。理想情况下,我正在寻找的是:

SELECT
    COUNT(T.Time_recID) as Time_Entries, COUNT(DISTINCT(s.TicketNbr)) as Tickets
FROM
    v_rpt_Service s
    LEFT JOIN v_rpt_time t on s.TicketNbr = t.SR_Service_RecID
GROUP BY
    COUNT(t.Time_recID)

导致此错误:

消息 144,级别 15,状态 1,第 8 行 不能在用于 GROUP BY 子句的 group by 列表的表达式中使用聚合或子查询。

如何重构初始查询以提供与上面列表类似的输出?

【问题讨论】:

    标签: sql-server aggregation


    【解决方案1】:
    SELECT q.TimeEntries,count(q.TicketNbr) As Tickets
    FROM ( SELECT
                s.TicketNbr, count(t.Time_RecID) As TimeEntries
            FROM
                v_rpt_Service s
            LEFT JOIN v_rpt_time t on s.TicketNbr = t.Time_RecID
            GROUP BY s.TicketNbr) As q
    GROUP BY q.TimeEntries
    ORDER BY q.TimeEntries DESC
    

    您可能需要考虑当票证没有时间条目时会发生什么(我假设可能是LEFT JOIN的情况

    【讨论】:

    • 知道了!我必须做的唯一更改是 LEFT JOIN —— T.Time_RecID 是时间条目的 ID,而 TicketNbr 是工单的 ID。我现在看到我错误地提出了这个问题(我已经更新了)—— LEFT JOIN v_rpt_Time t on s.TicketNbr = t.SR_Service_RecID。谢谢,西蒙!做到了!
    • @dijikul,很高兴我能帮上忙。请标记为答案,以便其他人知道您的问题已解决。
    【解决方案2】:

    您可以进行嵌套查询:

    SELECT TicketNbr, count(Time_RecID)
    FROM
    (SELECT
        s.TicketNbr, t.Time_RecID
    FROM
        v_rpt_Service s
        LEFT JOIN v_rpt_time t on s.TicketNbr = t.Time_RecID) AS table
    GROUP BY
    Time_RecID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2014-11-22
      • 2014-08-24
      • 1970-01-01
      相关资源
      最近更新 更多