我正在尝试从表格中选择具有特定年份的日期时间,并显示具有该年份的那些日期的数量。
我只能从日期时间中选择年份,但是它给了我每个特定日期的数量,而不仅仅是年份。喜欢:
| Date | Amount |
| 2012-04-07 | 5 |
| 2012-05-21 | 5 |
但是我只想要2012, 10
。
Select YEAR(Orderdate), count(*)
From Orders
Group by Orderdate
输出需要在一行中显示带有2012年的一行,在第二栏中显示2012年的总数。像这样:
| Year | Amount |
| 2012 | 10 |
| 2013 | 8 |
| 2014 | 2 |
答案 0 :(得分:3)
在您的WHERE
子句中使用正确的日期逻辑:
SELECT YEAR(OrderDate) AS [Year],
COUNT(OrderID) AS Orders --Assumed Column Name
FROM Orders
WHERE OrderDate >= '20120101'
AND OrderDate < '20130101'
GROUP BY YEAR(OrderDate);
像YEAR(OrderDate)
这样的子句不可SARGable,这意味着不能使用表中的索引。这可能会对查询的性能产生严重影响。因此,使用布尔逻辑而不在WHERE
的列中应用函数是最佳选择。
答案 1 :(得分:2)
对于SQL Server;
SELECT YEAR(Orderdate), COUNT(1)
FROM Orders
GROUP BY YEAR(Orderdate)
答案 2 :(得分:0)
您可以通过编写嵌套查询来实现
SELECT Year , Count(*) AS Total_Count
FROM (Select YEAR(Orderdate) AS Year, *
From Orders)
WHERE Year = '2012'
GROUP BY Year