我有以下查询
select
datepart(yy, orderDate) as 'year',
datename(mm, OrderDate) as 'month',
count(*) as 'Orders'
from orders (yeah I know its missing the schema, its from a book)
group by
datepart(yy, orderdate),
datename(mm, orderdate)
order by
datepart(yy, orderdate),
datename(mm, orderdate);
它返回 3 列,但datename(mm, orderdate)
返回一个字符串,因此按其排序将 8 月置于 1 月之前等。
解决方案如下:
select
datepart(yy, orderDate) as 'year',
datename(mm, OrderDate) as 'month',
count(*) as 'Orders'
from orders (yeah i know its missing the schema, its from a book)
group by
datepart(yy, orderdate),
datename(mm, orderdate),
datepart(mm, orderdate)
order by
datepart(yy, orderdate),
datepart(mm, orderdate);
我仍然对整个 group by / order by section 及其实际工作方式感到有些困惑。
据我了解,group by 正在创建一个包含 4 列(可能是错误的)datepart(yy, orderdate), datename(mm, orderdate), datepart(mm, orderdate)
和一count
列的工作表。
每次遇到orderdate
它在工作表中的一个它会增加计数,否则它会添加一个新行?
最初我以为我可以DateName(mm, orderdate)
按部分从组中删除,但书上说这是不可能的。
如果有人可以逐步了解幕后实际发生的事情/指出一个资源,该资源可以更详细地解释这是如何工作的,我将不胜感激。
谢谢你的帮助。