我想计算我有多少年的例子,例如
CREATE TABLE YEARS
(
ID INT,
DATE_TO_COUNT DATE
)
假设我们在表2014-03-13,2014-04-20,2015-01-13,2016-03-13中有表示 我想收到像
这样的东西YEAR INSTANCES
2014 2
2015 1
2016 1
所以我尝试DATEPART从中抽出一年,我不知道如何计算重复年份的实例
SELECT DATEPART(YEAR,DATE_TO_COUNT) [YEARS]
FROM YEARS
当我多年尝试分组时,它表示年份不存在,当我尝试按date_to_count分组时,它不计算
有什么想法吗?
答案 0 :(得分:3)
您可以尝试以下简单查询。
select YEAR(DATE_TO_COUNT) Years,COUNT(*) Instances from YEARS
group by YEAR(DATE_TO_COUNT)
答案 1 :(得分:2)
已经有了可行的答案,但如果你想看看在这种情况下如何使用DATEPART
:
select DATEPART ( year , DATE_TO_COUNT ), count(*)
from YEARS
group by DATEPART ( year , DATE_TO_COUNT )
答案 2 :(得分:0)
这与SQL Server无关,它只是SQL的工作原理。在尝试编写查询之前使用SQL tutorial会很好
SQL,这种语言,不允许您按派生列进行分组。表格中没有YEARS
列,因此无法对其进行分组。如果要按派生值进行分组,则必须指定它。
如果要从分组中获取任何统计信息,则需要使用COUNT()
或SUM()
等聚合函数。没有它,你什么也得不到。 SQL无法猜测您是否要计算字段中的行数或值。
你可以用
获得你想要的东西SELECT YEAR(DATE_TO_COUNT) AS Year,COUNT(*) As Instances
From YEARS
GROUP By YEAR(DATE_TO_COUNT)
答案 3 :(得分:0)
BEGIN TRAN
CREATE TABLE #YEARS ( ID INT, DATE_TO_COUNT DATE )
INSERT INTO #YEARS
SELECT 1 ,'2014-03-13' UNION ALL
SELECT 2,'2014-04-20' UNION ALL
SELECT 3,'2015-01-13' UNION ALL
SELECT 4, '2016-03-13'
SELECT YEAR(DATE_TO_COUNT) YEAR,COUNT( YEAR(DATE_TO_COUNT)) COUNT FROM #YEARS
GROUP BY YEAR(DATE_TO_COUNT)
ROLLBACK TRAN
答案 4 :(得分:0)
通过使用PARTITION BY,我们也可以实现它。
SELECT DISTINCT DATEPART(year, DATE_TO_COUNT)
,COUNT(DATE_TO_COUNT) OVER (PARTITION BY DATEPART(year, DATE_TO_COUNT))
FROM YEARS
答案 5 :(得分:0)
使用Group By子句有一个简单的SQL查询。
CREATE TABLE tblyears
(
id INT,
date_to_count DATETIME
)
SELECT *
FROM tblyears
示例数据:
ID date_to_count
1 2014-05-21 18:12:13.177
2 2014-05-16 18:12:13.177
3 2014-05-24 18:12:13.177
4 2015-04-09 18:12:13.177
5 2015-02-10 18:12:13.177
6 2016-01-11 18:12:13.177
<强>查询:强>
SELECT Year(date_to_count) AS Years,
Count(date_to_count) AS Instances
FROM tblyears
GROUP BY Year(date_to_count)
<强>输出:强>
Years Instances
2014 3
2015 2
2016 1