Mam następujące zapytanieSQL Server przez grupę/zamówienia przez
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);
która zwraca 3 kolumny ale datename(mm, orderdate)
zwraca ciąg znaków, a zatem zamawianie przez nią stawia sierpnia przed styczniem itp
Rozwiązaniem tego problemu było następujące:
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);
Wciąż jestem trochę zdezorientowany z całą grupą według/kolejności według sekcji i jak to działa.
O ile zrozumiałem, grupa za pomocą tworzy tabelę roboczą z 4 kolumnami (może być nie tak) datepart(yy, orderdate), datename(mm, orderdate), datepart(mm, orderdate)
i kolumną count
.
Za każdym razem, gdy napotka na orderdate
, że ma w tabeli pracy zwiększa liczbę, w przeciwnym razie dodaje nowy wiersz?
Początkowo myślałem, że mogę usunąć DateName(mm, orderdate)
z grupy według sekcji, ale książka powiedziała, że nie jest to możliwe.
Jeśli ktoś może przejść przez to, co dzieje się za kulisami/wskazać zasób, który wyjaśnia, jak działa to w nieco bardziej szczegółowy sposób, doceń to.
dzięki za pomoc.
Jakie jest dokładnie Twoje pytanie? Po prostu szukasz wyjaśnienia, jak działa twoje zapytanie? –
Jestem po prostu mylić, jak to działa i początkowo myślałem, że mogę usunąć DateName z sekcji Group By. –
'order by orderdate' nie działa? Lub używając 'datepart' zamiast' datename 'w klauzuli' order'? – HABO