powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / "поворот" таблицы на 90 градусов
4 сообщений из 4, страница 1 из 1
"поворот" таблицы на 90 градусов
    #33279311
Arseniy Ovchinnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следующая задача:

table1:

id field1
----------
1
2

table2

table1_id position field1 field2 ...
--------------------------------------
1 1 'a' 10
1 2 'b' 20
1 3 'c' 30
2 2 'xxx' 100
2 3 'yyy' 200

нужно получить select с пимерно таким результатом:

position_1 position_2 position_3
table1_id table2_f1 tab2_f2 tab2_f1 tab2_f2 tab2_f1 tab2_f2
--------------------------------------------------------------------
1 'a' 10 'b' 20 'c' 30
2 NULL NULL 'xxx' 100 'yyy' 200

Вижу два решения, но оба мне не нравятся:

1. При попытке организовать выборку селектом приведенным ниже сервер вешается если количество полей в table2 или количество position достаточно большое.
select
table1.id,
table2_pos1.field1,
table2_pos1.field2,
table2_pos2.field1,
table2_pos2.field2,
table2_pos3.field1,
table2_pos3.field2
from
table1
left join
table2 as table2_pos1
on
table2_pos1.table1_id = table1.id and table2_pos1.position = 1
left join
table2 as table2_pos2
on
table2_pos2.table1_id = table1.id and table2_pos1.position = 2
left join
table2 as table2_pos3
on
table2_pos3.table1_id = table1.id and table2_pos1.position = 3

2. Можно, конечно, создать функции, которые будут возвращать нужное поле для заданных table1_id и position из table2
function get_field1 (@position, @table1_id) с запросом
select field1 from table2 where position = @position and table1_id = @table1_id

и итоговый запрос примет такой вид
select
id,
get_field1(table1.id, 1) as pos1_field1,
get_field2(table1.id, 1) as pos1_field2,
get_field1(table1.id, 2) as pos2_field1,
get_field2(table1.id, 2) as pos2_field2,
get_field1(table1.id, 2) as pos3_field1,
get_field2(table1.id, 2) as pos3_field2
from table1

но тогда сервер будет выполнять слишком большое количество действий, что тоже не хорошо.

Вопрос: можно ли оптимизировать один из методов или, может быть, существует еще какой-то способ о котором я не подозреваю.

PS работаю с MS SQL 2000
...
Рейтинг: 0 / 0
"поворот" таблицы на 90 градусов
    #33279364
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Arseniy Ovchinnikov: Если это вопрос по определенному серверу (MS SQL 2000), то есть форум Microsoft SQL Server , куда можно переместить эту тему.
...
Рейтинг: 0 / 0
"поворот" таблицы на 90 градусов
    #33279916
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это называется КроссТаб-отчёт.
Некоторые репортеры (например FastReport) умеют строить из плоской таблицы.
В самом T-SQL такой возможности пока нет.
...
Рейтинг: 0 / 0
"поворот" таблицы на 90 градусов
    #33279972
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДЕЛАЙТЕ КРОСС-ТАБЫ НА КЛИЕНТЕ.
А ЕЩЕ ЛУЧШЕ --
ВООБЩЕ НЕ ДЕЛАЙТЕ !!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / "поворот" таблицы на 90 градусов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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