SQL 按年份分组

问题描述 投票:0回答:6

这是我的询问。

SELECT CONVERT(varchar, cast(date as datetime), 3)
FROM shoptransfer 
GROUP BY year (date)

我想按日期 (

varchar
) 列的年份部分进行分组,但是出现以下错误:

列“shoptransfer.Date”在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。

如何按日期列的年份部分进行分组?

t-sql datetime sql-server-2008 group-by
6个回答
75
投票

怎么样:

select datepart(yyyy, [date]) as [year]
from shoptransfer 
group by datepart(yyyy, [date])

或者:

select count(*) as qty, datepart(yyyy, [date]) as [year]
from shoptransfer 
group by datepart(yyyy, [date])
order by [year]

这是基于OP的命令:“我想按日期(varchar)列的年份部分进行分组”


3
投票

使用 MariaDB:

SELECT year(date) FROM cost GROUP BY year(date)

1
投票

如果您想同时选择日期和年份,则不应使用 GROUP BY 子句,因为它将所有具有相似年份的行合并为一行。如果您想要将所有具有相似年份的日期放在一起,您可以使用 ORDER BY:

SELECT DATEPART('yyyy',date) AS Year,date
FROM shoptransfer 

SELECT DATEPART('yyyy',date) AS Year,date
FROM shoptransfer
ORDER BY DATEPART('yyyy',date) desc

1
投票

我不了解T-SQL,但在一般的SQL中,group by子句中的内容必须与select子句中的每个非聚合函数列完全匹配。尝试一下

select CONVERT(varchar,cast(date as datetime),3)
from shoptransfer 
where 
SUBSTRING(productcode, 5, 3) like '%'  group by CONVERT(varchar,cast(date as datetime),3)

此外,

where SUBSTRING(productcode, 5, 3) like '%'
并没有过滤掉太多 - 也许可以将其删除。


1
投票

您应该将列

shoptransfer.Date
添加到 group by 子句中。

select CONVERT(varchar,cast(date as datetime),3)
from shoptransfer 
where 
SUBSTRING(productcode, 5, 3) like '%' 
group by CONVERT(varchar,cast(date as datetime),3)

0
投票
group by
substring(CONVERT(varchar,comuln1,101),1,4)

2004年 2005年 2006

© www.soinside.com 2019 - 2024. All rights reserved.