powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Нумерация в группе
10 сообщений из 10, страница 1 из 1
Нумерация в группе
    #38426065
Смурфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE 15.7.

Есть таблица с полями A и B, оба поля varchar!

ABy003y001z001z003z002y003

Можно ли запросом(без курсора) получить такой результат

ABCy0032y0011z0011z0033z0022y0032

Т.е проставить номера внутри групп(поле A) с сортировкой (по порядку) поля B

Скрипт тестовых данных:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table #ttt (A varchar(20),B varchar(20),C int null)

insert into #ttt(A,B) values ('y','003')
insert into #ttt(A,B) values ('y','001')
insert into #ttt(A,B) values ('y','003')
insert into #ttt(A,B) values ('z','001')
insert into #ttt(A,B) values ('z','003')
insert into #ttt(A,B) values ('z','002')

select * from #ttt




Спасибо!
...
Рейтинг: 0 / 0
Нумерация в группе
    #38426834
Mr.DKSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with TTT(A,B,ID) as
(select D.A,
       D.B,
       N.row_num as ID
 from 
(select A,B,count(*) as N
  from #ttt
   group by A,B) D,
  lateral(sa_rowgenerator(1,D.N)) as N
)
select A,B,
       (select count(*) from TTT C where C.A=T.A and C.B<T.B)+
       (select count(*) from TTT C where C.A=T.A and C.B=T.B and C.ID<T.ID)+1 as N
 from TTT T   
       
...
Рейтинг: 0 / 0
Нумерация в группе
    #38426858
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смурфик,

У вас при создании таблицы есть поле С - тип integer, его можно использовать при select-е:

select a, b, CAST(b as integer) as C from #ttt;

Если конечно то, что Вам нужно.
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427048
чего-нибудь типа аналитики/оконных функций нет?
ну там всякие dense_rank() over(partition by a order by b) к примеру?
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427087
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмурфикМожно ли запросом(без курсора) получить такой результатДа, конечно.

Код: sql
1.
update #ttt set C=(select count(*)+1 from #ttt t2 where #ttt.A=t2.A and #ttt.B>t2.B)




Mr.DKSoft, стоит быть повнимательнее. ASE не знает того диалекта на котором ты пытаешься отвечать.
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427161
Mr.DKSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlСмурфикМожно ли запросом(без курсора) получить такой результатДа, конечно.

Код: sql
1.
update #ttt set C=(select count(*)+1 from #ttt t2 where #ttt.A=t2.A and #ttt.B>t2.B)




Mr.DKSoft, стоит быть повнимательнее. ASE не знает того диалекта на котором ты пытаешься отвечать.

Писал для ASA

Ваш запрос не вернет результат требуемый автором темы - по условиям задачи 2 записи с одинаковым B и у них будет одинаковое значение для С, а автор хочет нумерацию
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427197
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.DKSoftMr.DKSoft, стоит быть повнимательнее. ASE не знает того диалекта на котором ты пытаешься отвечать.

Писал для ASA[/quot]Но вопрос был про ASE.
Ты можешь писать для чего угодно, но если твой диалект не совпадает с диалектом используемым ТС - твой ответ на 90% бессмыслен.

Mr.DKSoftВаш запрос не вернет результат требуемый автором темы - по условиям задачи 2 записи с одинаковым B и у них будет одинаковое значение для С, а автор хочет нумерациюА если проверить?
ASA знает TSQL, ты можешь запустить в своей ASA, код предоставленный Смурфиком и мой ответ на его вопрос. А потом по буковкам сравнить желаемый результат с моим.
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427222
Смурфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlДа, конечно.

Код: sql
1.
update #ttt set C=(select count(*)+1 from #ttt t2 where #ttt.A=t2.A and #ttt.B>t2.B)





Спасибо. То что надо.
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427310
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СмурфикWhite OwlДа, конечно.

Код: sql
1.
update #ttt set C=(select count(*)+1 from #ttt t2 where #ttt.A=t2.A and #ttt.B>t2.B)





Спасибо. То что надо.

Маленькое дополнение(если я правильно понял задачу)

Код: sql
1.
update #ttt set C=(select count(distinct B)+1 from #ttt t2 where #ttt.A=t2.A and #ttt.B>t2.B)
...
Рейтинг: 0 / 0
Нумерация в группе
    #38427805
Смурфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cherrex_Den,

Кстати, ДА.
На это и намекал Mr.DKSoft.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Нумерация в группе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]