powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / сортировка данных в запросе
10 сообщений из 10, страница 1 из 1
сортировка данных в запросе
    #39950362
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,
Есть таблица такого вот типа
id_dep | id_dep_parent | dep_name_short
1 null Администраторы
3 11 Сектор №1 (444-1)
4 14 Лаборатория №551
5 4 Сектор №1 (551-1)
6 4 Сектор №2 (551-2)
7 14 Лаборатория №441
8 7 Сектор №1 (441-1)
9 7 Сектор №2 (441-2)
10 7 Сектор №3 (441-3)
11 14 Лаборатория №444
13 11 Сектор №2 (444-2)
14 null Руководство
15 7 Сектор №4 (441-4)

Необходимо вывести из этой таблицы сортированные данные , т.е. вот в таком порядке
Руководство и Администраторы игнорируем, а дальше
7 14 Лаборатория №441
8 7 Сектор №1 (441-1)
9 7 Сектор №2 (441-2)
10 7 Сектор №3 (441-3)
15 7 Сектор №4 (441-4)
11 14 Лаборатория №444
3 11 Сектор №1 (444-1)
13 11 Сектор №2 (444-2)
4 14 Лаборатория №551
5 4 Сектор №1 (551-1)
6 4 Сектор №2 (551-2)
Как это сделать Select запросом? Или еще как-то по другому можно?
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950363
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

нормально никак. Кто-то нарушил 3 НФ
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950366
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

ну а какой принцип сортировки? По алфавиту, но дерево? Версия FB какая?
На вскидку - в LangRef есть пример построения дерева через "with recursive". Это работает.
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950382
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия 2.5, сортировка по дереву нужна.
А можете подсказать как with recursive реализовать в данном случаи, так как я попробовал таким образом

мWITH RECURSIVE
dep_rec (id_dep, id_dep_parent, dep_name_short)
AS (
SELECT id_dep, id_dep_parent, dep_name_short FROM s_department where id_dep not in (1)
UNION ALL
SELECT dep_rec.id_dep, dep_rec.id_dep_parent, dep_rec.dep_name_short
FROM dep_rec, s_department dep
WHERE dep_rec.id_dep = dep.id_dep_parent and dep_rec.id_dep not in (1)
)
SELECT id_dep, id_dep_parent, dep_name_short FROM dep_rec
WHERE id_dep_parent is null

Выдало ошибку
Too many concurrent executions of the same request.
KreatorXXI
Serega325,

ну а какой принцип сортировки? По алфавиту, но дерево? Версия FB какая?
На вскидку - в LangRef есть пример построения дерева через "with recursive". Это работает.
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950383
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению структуру таблицы сейчас уже не переделать, мне она в таком виде досталась.
Симонов Денис
Serega325,

нормально никак. Кто-то нарушил 3 НФ
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950393
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

как-то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH RECURSIVE R
AS (SELECT
        ID_DEP,
        ID_DEP_PARENT,
        DEP_NAME_SHORT,
        CAST(DEP_NAME_SHORT AS VARCHAR(500)) AS FULL_NAME
    FROM TEST
    WHERE ID_DEP_PARENT IS NULL
    UNION ALL
    SELECT
        TEST.ID_DEP,
        TEST.ID_DEP_PARENT,
        TEST.DEP_NAME_SHORT,
        R.FULL_NAME || ' - ' || TEST.DEP_NAME_SHORT AS FULL_NAME
    FROM TEST
        JOIN R ON TEST.ID_DEP_PARENT = R.ID_DEP)
SELECT
    *
FROM R
ORDER BY FULL_NAME
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950588
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое, хотя бы так. А без FULL_NAME можно как-то обойтись?
Симонов Денис
Serega325,

как-то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH RECURSIVE R
AS (SELECT
        ID_DEP,
        ID_DEP_PARENT,
        DEP_NAME_SHORT,
        CAST(DEP_NAME_SHORT AS VARCHAR(500)) AS FULL_NAME
    FROM TEST
    WHERE ID_DEP_PARENT IS NULL
    UNION ALL
    SELECT
        TEST.ID_DEP,
        TEST.ID_DEP_PARENT,
        TEST.DEP_NAME_SHORT,
        R.FULL_NAME || ' - ' || TEST.DEP_NAME_SHORT AS FULL_NAME
    FROM TEST
        JOIN R ON TEST.ID_DEP_PARENT = R.ID_DEP)
SELECT
    *
FROM R
ORDER BY FULL_NAME

...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950592
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

вместо * перечисли поля явно без FULL_NAME. Мне ничего другого в голову не приходит. Может сам чего придумаешь
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950600
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на этом спасибо огромное
Симонов Денис
Serega325,

вместо * перечисли поля явно без FULL_NAME. Мне ничего другого в голову не приходит. Может сам чего придумаешь
...
Рейтинг: 0 / 0
сортировка данных в запросе
    #39950790
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно вынести сортировку в предварительный подзапрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
WITH RECURSIVE
TEST_ORD AS (
    SELECT
        ID_DEP,
        ID_DEP_PARENT,
        DEP_NAME_SHORT
    FROM TEST
    ORDER BY ID_DEP_PARENT, DEP_NAME_SHORT
),
R AS (
    SELECT
        ID_DEP,
        ID_DEP_PARENT,
        DEP_NAME_SHORT
    FROM TEST_ORD
    WHERE ID_DEP_PARENT IS NULL
    UNION ALL
    SELECT
        TEST.ID_DEP,
        TEST.ID_DEP_PARENT,
        TEST.DEP_NAME_SHORT,
    FROM TEST_ORD
        JOIN R ON TEST.ID_DEP_PARENT = R.ID_DEP)
SELECT
    *
FROM R


По крайней мере у меня похожий запрос отрабатывает как ожидалось. :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / сортировка данных в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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