powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли в FB1.5 применять Group by ко всему запросу с Union?
25 сообщений из 28, страница 1 из 2
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32588886
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал:
Select A1.f1, sum(A1.f2)
From A1
Group by A1.f1
UNION ALL
Select A2.f1, sum(A2.f2)
From A2
Group by A2.f1

Так работает, но убрать первый Group by A1.f1 не дает - выдает ошибку.

Если есть такая возможность, подскажите пож. синтаксис.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32588933
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>... но убрать первый Group by A1.f1 не дает - выдает ошибку.

Заодно и вместо sum(A1.f2) напиши 777 - всё опять заработает :))

...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32588977
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я не точно сказал, что мне надо. Приведу пример:
А1:
f1 f2
Иван 100
Иван 50
Петр 50

А2:
Иван 50
Петр 100

Запрос:
Select A1.f1, sum(A1.f2)
From A1
Group by A1.f1
UNION ALL
Select A2.f1, sum(A2.f2)
From A2
Group by A2.f1

вернет:
Иван 150
Петр 50
Иван 50
Петр 100

А мне необходимо:
Иван 200
Петр 150
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589004
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашей свои union`ы в ХП и общий group by примени при обращении к ХП.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589044
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. применить Group by ко всему запросу, в котором есть Union нельзя? Только через ХП/Просмотр?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589051
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать через FULL JOIN извернуться одним запросом.
Вообще, конечно, когда есть 2 таблички с идентичной структурой
и по ним приходится часто строить запросы с UNION, то имхо,
база криво спроектирована.
tria, как зовут человека, проектировавшего базу? Не Борис ли часом?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589075
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Табличка А1 - табличка остатков на начало каждого месяца, Табличка А2 - табличка движений. Структура соответственно отличается, совпадает только перечень аналитики. Цель запроса - получить оборотно-сальдовую ведомость за произвольный период. Полную структуру я не приводил, дабы проще было понять идею вопроса.

Кстати, отсюда вытекает следующий вопрос:
Select A1.f1, sum(A1.Ost), Sum(0), Sum(0)
From A1
Group by A1.f1
UNION ALL
Select A2.f1, Sum(0), sum(A2.Prihod) sum(A2.Rshod)
From A2
Group by A2.f1

В результирующем запросе A2.Prihod и A2.Rshod округлятся до целых. А мне это ненадо.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589091
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без UNION тут можно обойтись
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589098
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Без UNION тут можно обойтись

При это желательно обойтись без ХП и просмотров.
Дело в том, что текст запроса составляется динамически, в зависимости от требований пользователя. Создавать и удалять ХП и просмотр при каждом выполнении отчета - на мой взгляд нехорошо.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589130
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай уточним требуемый тип джойна.
Могут ли в таблице A1 быть такие значения поля F1, которых нету в А2?
И наоборот, могут ли в А2 быть значения F1, отсутствующие в А1?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589154
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Могут ли в таблице A1 быть такие значения поля F1, которых нету в А2?
Да, могут. Например - переходящий остаток с прошлого месяца. Движений в А2 нет, а остаток в А1 есть.

>И наоборот, могут ли в А2 быть значения F1, отсутствующие в А1?
Тоже могут быть. Товар пришел и ушел, остаток на конец месяца - 0. Такие записи есть в таблице движений А2 но отсутствуют в таблице остатков А1.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589168
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит таки FULL JOIN .
Вот на нём и строй запрос.
А UNION тебе не нужен.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589202
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Значит таки FULL JOIN.
>Вот на нём и строй запрос.

А можно пример? А то я честно говоря не знаю как.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589284
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>tria

Оборотно-сальдовую ведомость сразу, одним, сколь угодно сложным запросом не получишь...

>Мимопроходящий
>FULL JOIN

"Это вряд ли" (c)
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589326
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, в интербейсах нету full outer join, а в таких случаях именно он и нужен
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589354
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddНасколько я понял, в интербейсах нету full outer join, а в таких случаях именно он и нужен
А RTFM?

2tria: схематично и сильно упрощенно, запрос примерно такой:
Код: plaintext
1.
2.
3.
SELECT COALESCE(A1.F1, A2.F1),  /*...дальше тут то, что тебе нужно */ 
FROM
A1 FULL JOIN A2 ON A1.F1 = A2.F1
GROUP BY  1 
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589427
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Мимопроходящий
А как бы еще к полю COALESCE(A1.F1, A2.F1) применить LEFT JOIN?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32589432
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снимаю предыдущий вопрос. Протупил.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590666
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Мимопроходящий

Для правильной работы Вашего примера должно выполняться требование: не должно быть полей-аналитики со значением null.
Или я что-то не так понял?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590672
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переведи.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590687
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем примере f1 - имена сотрудников. Т.е. то, в разрезе чего хранятся остатки. Для работы Вашего примера недопустима ситуация:
f1 f2
Иван 100
Иван 50
Петр 50
null 30

А2:
Иван 50
Петр 100

В результате в выборке мы не получим строки

null, 30, 0
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590703
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, какую информацию в себе несёт строчка
null 30
?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590748
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример1: торговля комплектующими ПК. Аналитика: Склад, Товар, Серийный номер. Есть комплектующие, у которых нет серийного номера.
Пример 2: взаиморасчеты в разрезе Контрагент, Контракт. Бывают контрагенты, с которыми нет контрактов.
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590760
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мутишь ты чего-то. В твоём примере:
Код: plaintext
1.
2.
Иван  100 
Иван  50 
Петр  50 
как я понимаю, Иван и Петро - контрагенты (они же комплектующие, если угодно).
Или шо?
...
Рейтинг: 0 / 0
Можно ли в FB1.5 применять Group by ко всему запросу с Union?
    #32590795
tria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мутно высказываюсь - это наверное от того, что я хочу решить не конкретную задачу, а определиться с методологией работы в целом.

Есть такое понятие в 1С - регистр. Я хочу сделать его аналог.
На логическом уровне (для пользователя) регистр содержит:
1. Аналитику (Контрагент, Товар, Серийный номер) - то есть то, в разрезе чего хранятся остатки.
2. Ресурсы - Кво, Сумма - собственно говоря, какие остатки хранятся.

На физическом уровне регистр состоит из 2-х таблиц: таблица остатков и таблица движений. В таблицу остатков добавляется поле - дата остатка (в моем случае - дата начала месяца, периодичность хранения остатка - месяц). В таблицу движений добавляется поле Документ, сделавший движение, признак прихода/расхода, дата и время движения.

В общем случае, при записи нового движения пользователь может не указать одну из аналитик. В результате в текущем месяце появяться записи в обоих таблицах с аналитикой null. В следующем месяце останется одна такая запись в таблице остатков.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли в FB1.5 применять Group by ко всему запросу с Union?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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