Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Sql Server - Fatal编程技术网

Sql 如何在列中获取年数

Sql 如何在列中获取年数,sql,sql-server,Sql,Sql Server,我需要显示每个员工(ID,2011年、2012年、2013年、2014年)在各个年份的交易数量,我应该在年份编号下看到每年的交易数量,但现在我收到了以下表格: 我怎样才能改变它 我想我应该用WHERE,但我不知道怎么用 我目前的查询是: SELECT oh.SalesPersonID AS perID, YEAR(oh.OrderDate) AS [Year], COUNT(*) FROM Sales.SalesOrderHeader oh JOIN Person.Perso

我需要显示每个员工(ID,2011年、2012年、2013年、2014年)在各个年份的交易数量,我应该在年份编号下看到每年的交易数量,但现在我收到了以下表格:

我怎样才能改变它

我想我应该用WHERE,但我不知道怎么用

我目前的查询是:

SELECT oh.SalesPersonID AS perID, 
       YEAR(oh.OrderDate) AS [Year], COUNT(*)
FROM Sales.SalesOrderHeader oh 
JOIN Person.Person per ON oh.SalesPersonID = per.BusinessEntityID 
GROUP BY SalesPersonID, YEAR(OrderDate)
ORDER BY perID, [Year];

只需使用条件聚合:

SELECT oh.SalesPersonID AS perID, 
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2011 THEN 1 ELSE 0 END) as cnt_2011,
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2012 THEN 1 ELSE 0 END) as cnt_2012,
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2013 THEN 1 ELSE 0 END) as cnt_2013,
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2014 THEN 1 ELSE 0 END) as cnt_2014
FROM Sales.SalesOrderHeader oh JOIN
     Person.Person per
     ON oh.SalesPersonID = per.BusinessEntityID 
GROUP BY SalesPersonID
ORDER BY perID;

只需使用条件聚合:

SELECT oh.SalesPersonID AS perID, 
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2011 THEN 1 ELSE 0 END) as cnt_2011,
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2012 THEN 1 ELSE 0 END) as cnt_2012,
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2013 THEN 1 ELSE 0 END) as cnt_2013,
       SUM(CASE WHEN YEAR(oh.OrderDate) = 2014 THEN 1 ELSE 0 END) as cnt_2014
FROM Sales.SalesOrderHeader oh JOIN
     Person.Person per
     ON oh.SalesPersonID = per.BusinessEntityID 
GROUP BY SalesPersonID
ORDER BY perID;

回答得好。另一种可能是使用pivot查询,但我喜欢这个解决方案的简单性。回答不错。另一种方法可能是使用pivot查询,但我喜欢此解决方案的简单性。