按列分组不存在

时间:2017-05-16 06:46:43

标签: sql sql-server

我想计算我有多少年的例子,例如

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分组时,它不计算

有什么想法吗?

6 个答案:

答案 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