Sql 如何在列中获取年数
我需要显示每个员工(ID,2011年、2012年、2013年、2014年)在各个年份的交易数量,我应该在年份编号下看到每年的交易数量,但现在我收到了以下表格: 我怎样才能改变它 我想我应该用WHERE,但我不知道怎么用 我目前的查询是: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
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查询,但我喜欢此解决方案的简单性。