【问题标题】:How to combine an aggregate SQL query and normal query?如何结合聚合 SQL 查询和普通查询?
【发布时间】:2012-08-26 07:47:12
【问题描述】:

我在 SQL 2005 中有一个表,我想从中聚合数据,这是一个示例。

JobName       ProductionCounter       StartDate             EndDate               CounterName        Stage
----------------------------------------------------------------------------------------------------------

200           23                      2012-08-30 13:45:00                          Kilograms          Final
200           2                       2012-08-30 13:45:00                          Bars               Final
    [...]
200           46                      2012-08-30 13:45:00   2012-08-30 17:23:00    Kilograms          Final
200           4                       2012-08-30 13:45:00   2012-08-30 17:23:00    Bars               Final
300           20                      2012-08-30 13:45:00                          Kilograms          1st
300           10                      2012-08-30 18:12:00                          Bars               1st
    [...]
300           40                      2012-08-30 18:12:00   2012-08-30 19:17:00    Kilograms          1st
300           20                      2012-08-30 18:12:00   2012-08-30 19:17:00    Bars               1st

I want to format this into the following


JobName      TotalKilos       TotalBars       StartDate             EndDate               Stage
-----------------------------------------------------------------------------------------------

200          69               6               2012-08-30 13:45:00   2012-08-30 17:23:00   Final
300          60               30              2012-08-30 18:12:00   2012-08-30 19:17:00   1st

这让我意识到我对 SQL 一无所知。我已经尝试了以下作为开始

SELECT JobName, SUM(KiloCounter)
FROM vwOeeInterval
GROUP BY JobName

SELECT JobName, SUM(BarCounter)
FROM vwOeeInterval
GROUP BY JobName

我的问题是:

  1. 如何将这些组合成一个查询?

  2. 如何查询 StartDate 和 Stage 等列?尤其是结束日期 直到作业完成才填写?

任何指针将不胜感激。

【问题讨论】:

    标签: sql sql-server-2005 join aggregate


    【解决方案1】:

    这是一个简单的聚合查询。你只需要添加你想要的字段:

    SELECT JobName, SUM(KiloCounter) as TotalKilos,
           sum(BarCounts) as TotalBars,
           min(StartDate) as StartDate,
           max(EndDate) as EndDate,
           max(Stage) as Stage 
    FROM vwOeeInterval
    GROUP BY JobName
    

    我假设您知道 StartDate、EndDate 和 Stage 对于具有相同作业的所有行都是相同的或为 NULL。聚合将忽略 NULL 值。

    【讨论】:

    • 谢谢大家。我在使用 max() 和 min() 方面取得了进展,但我意识到我没有正确解释自己。我想查询ProductionCounter,其中CounterName 为“Kilos”,并将此“AS”列为“KiloCounter”。我还想查询 CounterName 是“Bars”的位置,但我认为这需要两个单独的 SELECT 以某种方式连接?
    • @TimRees。 . .在这种情况下,最好的办法是问另一个问题,提供之前和之后的数据。如果你只是修改你的问题,人们会阅读它,看到已经发布的答案,并想知道为什么这些答案如此离谱。
    • 谢谢,我创建了一个新问题。
    【解决方案2】:

    当您尝试先根据 Jobname 然后根据 countername 获得总和时,您应该根据这两列进行分组。

    不要忘记选择要分组的两列

    示例如下所示 -
    Select column1, column2, sum(column3) from tablename
    where blah blah blah...
    group by column1, column2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 2019-06-13
      相关资源
      最近更新 更多