Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как "развернуть" записи в таблице / 5 сообщений из 5, страница 1 из 1
05.02.2002, 08:53
    #32022154
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" записи в таблице
Приветствую,

Есть таблица, содержащая несколько десятков строк:
create table test (t_id int primary key not null)
create table result (t_id int primary key not null)

необходимо пройтись по каждой записи таблицы и если
она удовлетворяет некому условию, то вставить во вторую
таблицу некий набор строк, являющийся производным от
данной записи. Если конкретнее, то в test храняться id
пользователей и групп, соответственно, если при пробежке
по test мы видим, что id соответствует группе, то в итоговую
таблицу result пишем id пользователей из данной группы, иначе
просто id пользователя (если не группа...)

Так вот, как это сделать без курсора? Или же курсор в данном случае
вполне приемлем? Возможно ли применить UDF?

Благодарю.
...
Рейтинг: 0 / 0
05.02.2002, 10:31
    #32022177
Axl_Dead
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" записи в таблице
Бред какой-то!
Как вы будете разделять id групп и id пользователей? В одной-то колонке? Зачем? И что это за пользователь без группы?
Если конкретно по вопросу: используйте подзапрос типа "INSERT result (id) SELECT id From test WHERE id=(условие)". И никаких курсоров не трэба!
...
Рейтинг: 0 / 0
05.02.2002, 10:37
    #32022178
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" записи в таблице
Судя по постановке задачи, вам должен подойти CASE. И без всяких курсоров вроде бы может получиться. А основа как предложил Axl_Dead.
...
Рейтинг: 0 / 0
05.02.2002, 13:57
    #32022216
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" записи в таблице
Видимо, необходим пример.

create table test (t_id int, t_type char(1))
go

insert into test values (1, 'u')
insert into test values (2, 'u')
insert into test values (3, 'u')
insert into test values (4, 'g')
insert into test values (5, 'g')
insert into test values (6, 'g')
go

create table results (r_id int)
go

надо в results получить список всех id пользователей,
соответствующих записям из test.

то есть, в results должны оказаться строки вида

1
2
3
(строки с id пользователей из группы с id = 4)
(строки с id пользователей из группы с id = 5)
(строки с id пользователей из группы с id = 6)

для извлечения списка пользователей, входящих в заданную
группу, применяется некий select (типа select user_id
from user_group where group_id = ?).
...
Рейтинг: 0 / 0
05.02.2002, 14:05
    #32022221
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" записи в таблице
Забыл добавить, что пример с группами - частный случай. Интересует общее
решение, если оно есть. То есть, еще раз перефразируя: в таблице А в одну
кучу свалены ID разных по типу объектов (пользователей, групп и т.д.) с
указанием типа, конечно. Задача: получить список объектов заданного типа
на основе таблицы А. Правила, по которым получают список объектов, "входящих"
(или соответствующих) некому объекту X известны, но они могут быть сложными (т.е.
не в один запрос, как в случае получения списка пользователей для заданной группы).

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


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