powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помогите с запросом
19 сообщений из 19, страница 1 из 1
помогите с запросом
    #32030167
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица с полями
names pos
1 2
1 2
1 3
2 1
2 1
надо запросом упорядочить таблицу так чтобы
стало
names pos
1 1
1 2
1 3
2 1
2 2


не могу найти в форуме, нужно очень
...
Рейтинг: 0 / 0
помогите с запросом
    #32030172
Sergey Vinogradov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, order by уже не работает?

select * from ... order by names, pos
...
Рейтинг: 0 / 0
помогите с запросом
    #32030175
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Возможно, это то, что Вам необходимо:

\nSELECT names, pos
FROM
(SELECT distinct pos, names
FROM #T) A
ORDER BY names


Удачи
...
Рейтинг: 0 / 0
помогите с запросом
    #32030176
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ИЗВИНЯЮСЬ, ОШИБСЯ
НАДО ПРОАПДЕЙТИТЬ POS, ТАК ЧТОБЫ В НЕМ стало
names pos
1 1
1 2
1 3
2 1
2 2
...
Рейтинг: 0 / 0
помогите с запросом
    #32030178
Sergey Vinogradov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не совсем въехал в условие.

После внимательного прочтения все равно не понял - зачем держать вычисляемое,
постоянно меняюющееся во всей таблице поле pos.

Если в таблице есть какой-нибудь ПК типа id, то pos можно родить следующим запросом:

select names,
( select count(*) from t as t_inner where t_inner.names = t_outer.names and t_inner.id <= t_outer.id ) as pos
from t as t_outer
order by names, id

Если ПК нет, то ... "нет ножек - нет варенья" (с).
...
Рейтинг: 0 / 0
помогите с запросом
    #32030181
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточните пожалуйста, должно получиться декартово произведение возможных значений столбцов?
Или еще как-то похитрей?
...
Рейтинг: 0 / 0
помогите с запросом
    #32030190
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ольга
все проще
в pos должен содержаться порядкой номер names
вот так
names pos
2 1
2 2
2 3
2 4
2 5
2 6
2 7
5 1
5 2
5 3
5 4

и т.д.

2 all

извините за невнятный пост, просто аврал был
...
Рейтинг: 0 / 0
помогите с запросом
    #32030191
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ольга
все проще
в pos должен содержаться порядкой номер names
вот так
names pos
2 1
2 2
2 3
2 4
2 5
2 6
2 7
5 1
5 2
5 3
5 4

и т.д.

2 all

извините за невнятный пост, просто аврал был
никак не мог сооьразить
...
Рейтинг: 0 / 0
помогите с запросом
    #32030194
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно поняла, то
1. старые значения pos не нужны?
2. в какой очередности (ORDER BY) должны присваиваться порядковые номера одинаковым names?
3. и если какую-то запись c определенным names удалить, все по-новой должно update для этого names?
...
Рейтинг: 0 / 0
помогите с запросом
    #32030198
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ольга

>1. старые значения pos не нужны?
да, не нужны

>2. в какой очередности (ORDER BY) должны присваиваться порядковые номера одинаковым names?
без разницы

>3. и если какую-то запись c определенным names удалить, все по-новой должно update для этого names?
да, все правильно

спасибо
...
Рейтинг: 0 / 0
помогите с запросом
    #32030206
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тогда записи апдейтить? Может, этот подсчет в запросе делать?
Позволю себе ссылку:
FAQ.Нумерация записей в запросе


Т.е. если таблица не очень большая и есть счетчик, можно так:

SELECT TOP 100 PERCENT name,
(SELECT SUM(1)
FROM Table1 t1
WHERE t1.id <= t2.id AND t1.name = t2.name) AS pos
FROM Table1 t2
ORDER BY name
...
Рейтинг: 0 / 0
помогите с запросом
    #32030222
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To qwerty

По-моему, ответ на второй вопрос, дает мне основание сказать, что Вам нужно что-то другое. Ну, будут болтаться в таблице псевдонумерованные names, ну возни с ними вагон. Можно создать уникальный автоинкрементый индекс, пусть он работает, если вам порядок важен. А если порядок не важен, то ЗАЧЕМ нумеровать записи программно?
...
Рейтинг: 0 / 0
помогите с запросом
    #32030228
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемая Ольга, насколько я понял из названий полей и условий, qwerty нужна автоматическая нумерация позиций в документах, например счетах или накладных. qwerty, я прояснил или нет?
...
Рейтинг: 0 / 0
помогите с запросом
    #32030238
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 KonstN

верно

2 Ольга

автоинкремент не подходит


все дело в том, что с полей names и pos
сняли уникальный констрейн
...
Рейтинг: 0 / 0
помогите с запросом
    #32030239
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 KonstN

верно

2 Ольга

автоинкремент не подходит


все дело в том, что с полей names и pos
сняли уникальный констрейн
...
Рейтинг: 0 / 0
помогите с запросом
    #32030242
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To KonstN

Нумерация накладных - дело не простое, более того, эти вещи фиксируются в первичных бух. док-тах и если их запросто менять в базе данных ( и порядок не важен) ВАШ БУХГАЛТЕР и сесть может и это не смешно.
Спросите у бухгалтеров, как работают они с документами такого рода.

To qwerty
Скорее всего, FAQ вы прочли, и это то что Вам надо.
А если нет, то проясните задачу


С уважением,
Ольга
...
Рейтинг: 0 / 0
помогите с запросом
    #32030243
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга, я ж написал "например"
Например, это не счёт или накладная, а порядок вывода анкедотов на сайте anekdot.ru по дням недели.
Просто задача нумерации внутри групп.
А насчёт проблем, я думаю, что сделал backup, не так ли qwerty?
...
Рейтинг: 0 / 0
помогите с запросом
    #32030248
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех,

Решение "в лоб":

\nDECLARE @pos int, @names int

DECLARE names_curosor CURSOR
FOR SELECT DISTINCT names FROM MyTable

OPEN names_curosor

FETCH NEXT FROM names_curosor INTO @names

WHILE @@FETCH_STATUS = 0
BEGIN
SET @pos = 0
UPDATE #T
SET @pos = pos = @pos + 1
WHERE names = @names
FETCH NEXT FROM names_curosor INTO @names
END

CLOSE names_curosor
DEALLOCATE names_curosor


Курсор можно заменить на таблицу с флажком.
Ну и блокировать таблицу надо...

Удачи
...
Рейтинг: 0 / 0
помогите с запросом
    #32030319
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ольга
да, FAQ я прочел, спасибо

2 KonstN
бэкап я делал спасибо

2 jimmers
сейчас попробую вашу процедуру, спасибо
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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