Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询优化统计信息_Sql_Performance - Fatal编程技术网

SQL查询优化统计信息

SQL查询优化统计信息,sql,performance,Sql,Performance,我想知道是否有人能给我一个查询来得到结果 初始表格: ID Year Quantity 结果表: ID 2009_Quantity 2010_Quantity 2011_Quantity ... 我现在做的是: Select ID , (select sum(Id.Quantity) from Initial_Database id where id.Year = 2009) , (select sum(Id.Quantity) from Initial_Databas

我想知道是否有人能给我一个查询来得到结果

初始表格:

ID  Year  Quantity
结果表:

ID  2009_Quantity    2010_Quantity     2011_Quantity ...
我现在做的是:

Select ID 
, (select sum(Id.Quantity) from Initial_Database id where id.Year = 2009)
, (select sum(Id.Quantity) from Initial_Database id where id.Year = 2010)
from Initial_Database i
Group BY ID
但这需要花费数小时来处理数百万条记录,而这不是一个选项

我还尝试:

Select ID 
, CASE WHEN i.Year = 2009 THEN  sum(Id.Quantity) ELSE 0 END
, CASE WHEN i.Year = 2010 THEN  sum(Id.Quantity) ELSE 0 END
from Initial_Database i
Group BY ID
速度更快,但这给了我两行我不想要的行。

试试这样:

Select ID 
, SUM(CASE WHEN i.Year = 2009 THEN Id.Quantity ELSE 0 END)
, SUM(CASE WHEN i.Year = 2010 THEN Id.Quantity ELSE 0 END)
from Initial_Database i
Group BY ID

我现在很生气,因为我自己没有尝试。。。它似乎有效,我将尝试插入,如果有效,我将标记答案。如果您使用的是SQL Server SUM函数,可以像
SUM(Quantity)OVER(PARTITION BY Year)
@AllanS.Hansen我以前没有使用OVER和PARTITION BY,我不是一个真正的DBA'er。所以我真的不知道怎么做<代码>从初始_数据库中选择不同的年份、总和(数量)和(按年份划分)以查看其功能。OVER()函数在许多情况下可以帮助您避免子查询,在这种情况下也可能对您有帮助。(我确实认为它们是特定于sql server的,但我相信其他版本也有类似的功能)@AllanS.Hansen这确实给了我每年的一笔钱。但在行中,我仍然需要将它们转换为列。2010 100 - 2011 50 - 2012 70