|
|
|
Запрос на вычисление с учетом иерархии - 1, 2, 3 иерархия.
|
|||
|---|---|---|---|
|
#18+
Есть статьи затрат с иерархией второго и третьего уровня. Есть две таблицы: 1. Статьи затрат: поля-Код; Название. 2. Проводки: поля-Код; Сумма. Во вторую таблицу данные вносятся исходя из последней иерархии, например: для статьи 1.1 последней иерархией являются статьи 1.1.1 - 1.1.3, а для статьи 1.2 или 1.3 последней иерархии нет - они сами являются статьями последней иерархии. Вопрос: как рассчитать затраты по всем иерархиям, чтобы в результате получилось, что-то вроде ниже приведенного. Возможно также необходимо добавить новые поля в таблицу 1-Статьи затрат. Код Название Сумма 1 Расходы, итого 300 1.1 Аренда 90 1.1.1 аренда склада 20 1.1.2 аренда офиса 30 1.1.3 аренда прочая 40 1.2 Зарплата 100 1.3 Транспортные расходы 110 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2004, 21:18:53 |
|
||
|
Запрос на вычисление с учетом иерархии - 1, 2, 3 иерархия.
|
|||
|---|---|---|---|
|
#18+
При ограниченом числе уровней (ну скажем до 10) все довольно просто. Сначала надо сверху вниз выстроить собственно дерево - N запросов по числу уровней. Начиная от корня (iParentObjectID Is NULL) опускаясь каждый раз вниз на один уровень (SELECT ... FROM tblObject AS Parent INNER JOIN tblObject as Child ON Parent.iObjectID=Child.iParentObjectID). Заодно посчитать nChildNumber. Построить для каждой веточки полный адрес вида "001.001.002". Соединить все N запросов в один при помощи UNION. Затем снизу вверх для каждого уровня надо посчитать суммы конечных листочков + суммы всех детей. Если нужно динамически раскрывать/закрывать уровни, то нужно где-то (в исходных таблицах или в отдельной специальной) организовать флажки bIsExpanded bIsVisible, которые нужны для манипулирования а-ля дерево эксплорера. В общем задача решаемая, если поковыряться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2004, 22:10:49 |
|
||
|
Запрос на вычисление с учетом иерархии - 1, 2, 3 иерархия.
|
|||
|---|---|---|---|
|
#18+
На чем база? SQL Server или MDB? На MDB я делал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. А потом, например, выбрали какой-то элемент в поле Me![Поле] - формируем условие на данные: Код: plaintext ---------- А на SQL Server делал UDF: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Получается на выходе таблица Родитель и все его дети, включая самых-самых-дальных родственников. Далее используем ее... Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2004, 18:08:26 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=45&tid=1669693]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
20ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 295ms |

| 0 / 0 |
