1

想知道是否有人可以为此提供代码帮助。我想查询数据并获得 2 个条目,一个用于 YTD 上一年,一个用于今年 YTD。

我知道如何做到这一点的唯一方法是使用 where 子句进行 2 个单独的查询。我宁愿不必运行两次查询。

一列名为 DatePeriod 并填充了 2011 YTD 和 2012YTD,如果我可以让它执行 2011YTD、2012YTD、2011Total、2012Total 会更好......尽管猜测这是 4 个查询。

谢谢

编辑:为了帮助清除一些事情:这是在 MS SQL 中编码的。

数据看起来像这样:(非常基本的例子)

Date       |   Call_Volume
1/1/2012   |   4

我想要Call_Volume总结一下,我有按周分组的查询,还有按月分组的查询。我可以将所有样片都拉入并在 Excel 中执行此操作,但该表有数百万行,所以总是最好减少我的输出大小。

我目前按周/月和年分组,并联合所有所以它的 1 个输出。但这意味着我有 3 个查询访问同一个表,非常痛苦,非常慢,效率不高,这很好,但现在我还需要一个 YTD,所以它要么再多 1 个查询,要么我能找到一种方法将其添加到年度查询中这将是理想的:

所以

DatePeriod   |   Sum_Calls
2011 Total   |   40
2011 YTD     |   12
2012 Total   |   45
2012 YTD     |   15

希望这有任何意义。

4

1 回答 1

1

SQL 旨在对进行操作,而不是对进行操作(当然,您选择列,但聚合操作都在行上)。

最标准的方法是这样的:

SELECT SUM(your_table.sales), YEAR(your_table.sale_date)
FROM your_table
GROUP BY YEAR(your_table.sale_date)

现在,您将获得记录在案的每一年的一行,您可以处理的年限没有限制。如果您已经按另一个字段分组,那很好;然后,您将在每个组中获得每一年的一行。

然后,您的程序可以遍历行并按照您的喜好组织/渲染它们。

如果您绝对肯定必须有列,那么您将遇到以下问题:

SELECT SUM(IF(YEAR(date) = 2011, sales, 0)) AS total_2011,
  SUM(IF(YEAR(date) = 2012, total_2012, 0)) AS total_2012
FROM your_table

如果您以编程方式构建查询,您可以根据需要添加尽可能多的列条件,但我不会指望这种运行非常有效。

(这些示例是使用一些 MySQL 特定的函数编写的。其他引擎也存在相应的函数,但语法会有所不同。)

于 2012-04-17T17:32:30.420 回答