Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
"поворот" таблицы на 90 градусов
|
|||
|---|---|---|---|
|
#18+
Следующая задача: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 16:17 |
|
||
|
"поворот" таблицы на 90 градусов
|
|||
|---|---|---|---|
|
#18+
2Arseniy Ovchinnikov: Если это вопрос по определенному серверу (MS SQL 2000), то есть форум Microsoft SQL Server , куда можно переместить эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 16:32 |
|
||
|
"поворот" таблицы на 90 градусов
|
|||
|---|---|---|---|
|
#18+
Это называется КроссТаб-отчёт. Некоторые репортеры (например FastReport) умеют строить из плоской таблицы. В самом T-SQL такой возможности пока нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 19:41 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=148&tid=1545658]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 273ms |
| total: | 375ms |

| 0 / 0 |
