前几年和今年的SQL年初至今

前几年和今年的SQL年初至今,sql,sql-server,Sql,Sql Server,不知道是否有人能帮上忙。 我想查询数据并得到两个条目,一个是上一年年初至今的条目,另一个是今年年初至今的条目 我知道的唯一方法是使用where子句进行两个单独的查询。。我宁愿不必运行两次查询 一个名为DatePeriod的列,填充了2011年年初至今和2012年年初至今,如果我能让它做2011年年初至今、2012年年初至今、2011年全年、2012年全年……会更好。。。虽然猜测这是4个查询 谢谢 编辑: 为了帮助澄清一些问题: 这是用MS SQL编写的 数据如下:(非常基本的示例) 我希望将呼叫

不知道是否有人能帮上忙。 我想查询数据并得到两个条目,一个是上一年年初至今的条目,另一个是今年年初至今的条目

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

一个名为DatePeriod的列,填充了2011年年初至今和2012年年初至今,如果我能让它做2011年年初至今、2012年年初至今、2011年全年、2012年全年……会更好。。。虽然猜测这是4个查询

谢谢

编辑: 为了帮助澄清一些问题: 这是用MS SQL编写的

数据如下:(非常基本的示例)

我希望将
呼叫量
汇总,我有按周分组的查询,还有一些按月分组的查询。我可以把所有的日报都放到Excel中,但表格有数百万行,所以最好减少输出的大小

我目前按周/月和年分组,并将其全部合并为1输出。但这意味着我有3个查询访问同一个表,非常痛苦,非常慢,效率不高,这很好,但现在我还需要一个YTD,因此它要么多了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的函数编写的。其他引擎也有相应的函数,但语法会稍有不同。)

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的函数编写。其他引擎也有相应的函数,但语法会有点不同。)

请发布您的“2个单独的查询”以及@bluefeet提到的内容。请发布您的“2个单独的查询”以及@bluefeet提到的内容