Re: Как оптимизировать?

From
Vladimir Ilyashenko (2:5080/1003)
To
Alexander Zamyatin
Date
2006-03-28T23:35:20Z
Area
SU.DBMS.SQL
From: "Vladimir Ilyashenko" <fido7@front.ru>
Reply-To: "Vladimir Ilyashenko" <fido7@front.ru>

               Здравствуй, Alexander !

"_28_" _марта_ 2006 г. Alexander написал в <fido7.su.dbms.sql>  на тему:
*"Как оптимизировать?"*

VI>> Подскажите, пожалуйста, какие есть алгоритмы "разворота" следующей
VI>> таблицы

[Пропущено]
AZ>  Имеется таблица:

AZ> CREATE TABLE T
AZ> (
AZ>   A  NUMBER,
AZ>   B  NUMBER,
AZ>   C  VARCHAR2(10),
AZ>   D  VARCHAR2(10),
AZ>   E  VARCHAR2(10),
AZ>   F  VARCHAR2(10)
AZ> );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 1, 1, '1c', NULL, NULL, NULL );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 1, 2, NULL, NULL, NULL, '1f' );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 1, 3, NULL, NULL, '1e', NULL );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 2, 1, '2c', NULL, NULL, NULL );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 2, 2, NULL, '2d', NULL, NULL );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 2, 3, NULL, '2dd', NULL, NULL );
AZ> INSERT INTO T( A, B, C, D, E, F )
AZ>      VALUES ( 2, 4, NULL, NULL, '2e', NULL );
AZ> COMMIT ;

Название СУБД: Microsoft.Jet.OLEDB.4.0
Конфигурацию таблицы, спасибо, помог отобразить ты. А по поводу, что в
грамотно поставленном вопросе лежит большая часть ответа, я полностью
согласен - действительно сформулировал мутновато.

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

Итог выполнения запроса должен представлять следующую таблицу (условные
значения рядов и полей "соответствуют" таблице-источнику):
TABLE DEST
<fields> b1    b2    b3     b4
________________________
a1        1c    1d    1e    1f
a2        2c    2d          2f
a3        3c          3e    3f
...
т. е. итог запроса как-бы сгруппировывает значения колонки А
таблицы-источника по одинаковым значениям и переносит данные полей C...F
источника по полям соответствующим значениям колонки B таблицы-источника,
принадлежащим одинаковому значению колонки A.
Физически таблица-источник - это отображение объектов (col. A), их свойств
(col. B) и величин этих свойств (col. C-F). Свойства разбросаны по их
типам - Char, DateTime, Integer, Currency. Необходимо построить перечень
значений всех свойств по каждому объекту. Естественно каждое поле таблицы
получателя получит тип соответствующего свойства, т. е. с этой стороны все
выполнимо.
Сейчас я делаю это запросом о6ъединения таблицы с собой через псевдонимы,
вкратце так:

SELECT T1.a, T2.c, T3.d,T4.e,T5.f
FROM TabSource T1, TabSource T2,TabSource T3,TabSource T4,TabSource T5
WHERE (T2.a = T1.a AND T2.b = 1) AND (T3.a = T1.a AND T3.b = 2)  AND
(T3.a = T1.a AND T3.b = 3) AND (T4.a = T1.a AND T4.b = 4)  AND
(T5.a = T1.a AND T5.b = 5)

и другого придумать не смог - опыта маловато. Поэтому и решился спросить,
существуют ли еще алгоритмы "развернуть" таблицу - источник другим методом?

          Всего тебе наилучшего, Alexander!
_                                                        Владимир.         _
/VERBA VOLANT, SCRIPTA MANENT/ <слова улетают, написанное остается>


--- ifmail v.2.15dev5
 * Origin: Private (2:5080/1003@fidonet)
SEEN-BY: 46/50 50/12 140/1 450/1024 5000/5000 5009/14 5010/53 5011/13 5012/46
SEEN-BY: 5015/28 5019/31 5020/545 715 921 1822 1873 2024 2044 4441 12000
SEEN-BY: 5021/29 5022/5 5025/3 5026/10 5027/12 5030/115 5035/38 5043/0 5045/7
SEEN-BY: 5052/4 5053/16 5054/1 8 9 28 35 37 45 63 67 5059/9 5076/1 5077/70
SEEN-BY: 5080/68 1003 5085/13 5095/20 5096/18 6000/0 1 12 6056/1
PATH: 5080/1003 5020/715 545 5054/1 37