|
Обсуждение тем, сопутствующих OLAP, системам поддержки принятия решений (СППР, DSS), добыч данных (data mining), хранилищ данных (DW).
Тема "Запрос с функциями агрегирования"
| Здесь показана часть таблицы фактов (STAFF), на которой построен куб:
------------------------------------------------------------------------------------------------ ФИО(ключ)........Должность............Шт.расписание........Ставка ------------------------------------------------------------------------------------------------ 1......................ген.директор.........основной................1 1......................гл.бухгалтер.........совместитель...........0,25 2......................гл.инженер...........основной.................1 2......................нач-к цеха...........совместитель............0,5 3......................инженер...............основной.................1 3......................конструктор.........совместитель............0,5 3......................программист.........совместитель............0,25 4......................инженер...............основной.................1 ------------------------------------------------------------------------------------------------
Задача такая - нужно вывести список людей (FIO_Id), которые имеют СУММАРНУЮ ставку 1.0, 1.25, 1.5 и 1.75. Это делает SQL-запрос:
SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.0 GROUP BY FIO_Id UNION SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.25 GROUP BY FIO_Id UNION SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.5 GROUP BY FIO_Id UNION SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.75 GROUP BY FIO_Id
Результат запроса: ------------------------------------------ sumSTAVKA..........FIO_Id ------------------------------------------ ........1....................4 ........1,25...............1 ........1,5.................2 ........1,75...............3 ------------------------------------------ Наверное, запрос написан неоптимально, но не в нем дело.
Требуется получить этот же результат не селектом из таблицы фактов, а из куба. Как это сделать? Можно ли здесь использовать MDX-запрос? Как он должен выглядеть?
Если не MDX, то как еще можно получить этот результат? |
Ответить на сообщение » |
|