Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.05.25;
Скачать: CL | DM;

Вниз

Сгруппировать объединение...   Найти похожие ветки 

 
Александр Т ©   (2011-02-21 10:24) [0]

___FB 1.5.5___

Две таблицы с идентичными полями. В обеих нужно сделать выборки, обе выборки объединить и сгруппировать по каким-то полям.
Решил двумя процедурами, причем вторая вызывает первую:

create procedure Proc1 returns (<набор полей>)
begin
 for select <набор полей> from Таблица 1
   where "Условия 1"
 into <:набор полей>
 do
   Suspend;

 for select <набор полей> from Таблица 2
   where "Условия 2"
 into <:набор полей>
 do
   Suspend;
end

create procedure Proc2 returns (<набор полей>)
begin
 for select <набор полей> from Proc1    
 into <:набор полей>
 GROUP BY "Поля группировки"
 do
   Suspend;
end


В общем-то работает...
Одно не нравится: как-то громоздко и если первая процедура выполняется, например за 16 мс, то вторая - за 400 с лишним.
Оно вроде понятно, первая работает по в меру индексированным полям, а вторая с хаотичным набором данных.

Но возможно ли как-то покрасивше ? :)


 
clickmaker ©   (2011-02-21 11:12) [1]

> обе выборки объединить

а в FB union нету?


 
Александр Т ©   (2011-02-21 12:57) [2]


> а в FB union нету?

Ну как же нету :)
И даже order by для результирующего набора дозволяет...
А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)


 
sniknik ©   (2011-02-21 13:07) [3]

> А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)
ошибаешься, не работал с FB но в еще IB 6.5 группировка была. рад?


 
Александр Т ©   (2011-02-21 13:16) [4]


> еще IB 6.5 группировка была. рад?

Еще нет...

select Pole1 from Table1
union
select Pole_тоже_1 from Table2

group by Pole1

Так, что ли?

Я ж не про group by вообще, а применительно к union-у


 
Sergey13 ©   (2011-02-21 14:11) [5]

> [0] Александр Т ©   (21.02.11 10:24)

Сделай вьюху с union-ом, а по ней уже group by.

> Две таблицы с идентичными полями.

99% что недоработка в проектировании БД.


 
sniknik ©   (2011-02-21 14:37) [6]

> Так, что ли?
> Я ж не про group by вообще, а применительно к union-у
примерно...
group by 1
попробуй, или 0 смотря с чего там нумерация.


 
Александр Т ©   (2011-02-21 14:46) [7]


примерно...
group by 1

да она по-любому будет только второй select группировать


 
Александр Т ©   (2011-02-21 14:54) [8]


> Сделай вьюху с union-ом

В select-е всякий раз условия where разные.
Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...

Н-да, однако 99% что недоработка в проектировании БД.


 
sniknik ©   (2011-02-21 16:50) [9]

подзапросов тоже нет? -

SELECT Pole1, Count(*) AS Cnt  FROM (
 SELECT Pole1 FROM Table1
 UNION ALL
 SELECT Pole2 FROM Table2
)
GROUP BY Pole1


(могут быть вариации в синтаксисе)


 
Sergey13 ©   (2011-02-21 17:32) [10]

> [8] Александр Т ©   (21.02.11 14:54)
> Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...

Именно. Только Union All не забудь.

> [9] sniknik ©   (21.02.11 16:50)

Не умеет ФБ1.5 делать select from select


 
Игорь Шевченко ©   (2011-02-21 18:34) [11]


> Не умеет ФБ1.5 делать select from select


зато умеет view


 
Александр Т ©   (2011-02-22 04:02) [12]

>to all
Спасибо :).



Страницы: 1 вся ветка

Текущий архив: 2014.05.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
3-1298639170
Очень злой
2011-02-25 16:06
2014.05.25
Проблема с запросом.


15-1384896605
Юрий
2013-11-20 01:30
2014.05.25
С днем рождения ! 20 ноября 2013 среда


2-1375335686
Den
2013-08-01 09:41
2014.05.25
enumchildwindows вопрос по последнему параметру


2-1375798951
mfender
2013-08-06 18:22
2014.05.25
Появляются лишние символы при отправке TIdMultiPartFormDataStream


2-1375709808
savek
2013-08-05 17:36
2014.05.25
[Warning] BaseUnit.pas(558): W1000 Symbol Resume is deprecated