#sql #sql-server #tsql
Вопрос:
Это мои результаты
Row DocDate CardCode ItmsGrpNam
1 2019-01-23 00:00:00.000 C-SGD-1817 MH-PltTruck/Hand
2 2019-01-23 00:00:00.000 C-SGD-1817 MH-PltTruck/Hand
1 2021-09-07 00:00:00.000 C-SGD-1817 MH-PltTruck/Hand
Может ли столбец «Строка» основываться на году. если в том же году он должен быть «1» для года «2019»
Row DocDate CardCode ItmsGrpNam
1 2019-01-23 00:00:00.000 C-SGD-1817 MH-PltTruck/Hand
1 2019-01-23 00:00:00.000 C-SGD-1817 MH-PltTruck/Hand
2 2021-09-07 00:00:00.000 C-SGD-1817 MH-PltTruck/Hand
Ниже приведен мой запрос:
select row_number() over (partition by o3.CardCode, o3.ItmsGrpNam, Year(o3.DocDate) order by o3.DocDate) [row]
, o3.DocDate, o3.CardCode, o3.ItmsGrpNam
from OINV o3
Комментарии:
1. Вы пробовали
rank
2. DENSE_RANK() над (раздел по T0.Код карты,T3.ItmsGrpNam,Год(T0. DocDate) порядок по годам(t0. Докдейт) )[строка]. Я пробовал так, это все равно то же самое, все как»1″
Ответ №1:
Вам нужно удалить год из раздела и использовать dense_rank
функцию.
select dense_rank() over (partition by o3.CardCode, o3.ItmsGrpNam order by Year(o3.DocDate)) [row]
, o3.DocDate, o3.CardCode, o3.ItmsGrpNam
from OINV o3
Комментарии:
1.
partition by o3.CardCode, o3.ItmsGrpNam
часто замедляйте запрос. Разбиение на колонну varchar — всегда плохая идея. Более того, в вашем образце скрипки, который я протестировал, этоpartition by o3.CardCode, o3.ItmsGrpNam
не требуется.просто удалите его. Толькоdense_rank() over ( order by Year(o3.DocDate))
будет работать