Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [FB]объеденение с union 
V
    Опции темы
Filosov
Дата 1.7.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.11.2008

Репутация: нет
Всего: нет



Есть запрос 
Код

select hdo.org o_kod, org.name o_name, spt.kod p_kod, spt.name p_name, sum(rco.cnt) realiz
from  mn_rc_tov_out rco, mn_hd_tov_out hdo,
      spr_tov spt, spr_org org
where (spt.kod = rco.tov) and
      (rco.doc = hdo.kod) and
      (hdo.ORG = org.kod) and
      (org.grp in (select gr.kod from spr_org_groups gr
                where gr.kod = :grp_list or gr.parentid =:grp_list)) and
      (hdo.DAT = :DAT)
group by hdo.org, org.name, spt.kod, spt.name
union select hdo.org, org.name, spt.kod, spt.name, sum(rco.cnt)
from  mn_rc_tov_reserv  rco, mn_hd_tov_reserv  hdo,
      spr_tov spt, spr_org org
where (spt.kod = rco.tov) and
      (rco.doc = hdo.kod) and
      (hdo.ORG = org.kod) and
      (org.grp in (select gr.kod from spr_org_groups gr
                where gr.kod = :grp_list or gr.parentid =:grp_list)) and
      (hdo.DAT = :DAT)
group by hdo.org, org.name, spt.kod, spt.name

Он выдает правильные данные. Но как сделать чтобы sum(rco.cnt) из разных запросов выдавал в разные столбцы, но на одной строке когда остальные параметры  равны
В С1 так у меня получалось примерно так
Код

select hdo.org o_kod, org.name o_name, spt.kod p_kod, spt.name p_name, sum(rco.cnt) realiz, null zakaz
...
union select hdo.org, org.name, spt.kod, spt.name, null, sum(rco.cnt)
...

PM MAIL   Вверх
Zloxa
Дата 1.7.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 2
Всего: 161



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

както так:
Код

select o_kod,o_name,p_kod,p_name, sum(realiz_out),sum(realiz_in)
from (
select hdo.org o_kod, org.name o_name, spt.kod p_kod, spt.name p_name, sum(rco.cnt) realiz_out, 0 realiz_in
from  mn_rc_tov_out rco, mn_hd_tov_out hdo,
      spr_tov spt, spr_org org
where (spt.kod = rco.tov) and
      (rco.doc = hdo.kod) and
      (hdo.ORG = org.kod) and
      (org.grp in (select gr.kod from spr_org_groups gr
                where gr.kod = :grp_list or gr.parentid =:grp_list)) and
      (hdo.DAT = :DAT)
group by hdo.org, org.name, spt.kod, spt.name
union all
select hdo.org, org.name, spt.kod, spt.name,0 realiz_out sum(rco.cnt)
from  mn_rc_tov_reserv  rco, mn_hd_tov_reserv  hdo,
      spr_tov spt, spr_org org
where (spt.kod = rco.tov) and
      (rco.doc = hdo.kod) and
      (hdo.ORG = org.kod) and
      (org.grp in (select gr.kod from spr_org_groups gr
                where gr.kod = :grp_list or gr.parentid =:grp_list)) and
      (hdo.DAT = :DAT)
)
group by o_kod,o_name,p_kod,p_name,


Это сообщение отредактировал(а) Zloxa - 1.7.2009, 17:03


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Filosov
Дата 2.7.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.11.2008

Репутация: нет
Всего: нет



Код

select o_kod, o_name, p_kod, p_name, sum(realiz), sum(zakaz)
from (
select hdo.org o_kod, org.name o_name, spt.kod p_kod, spt.name p_name, rco.cnt realiz, 0.0 zakaz
from  mn_rc_tov_out rco, mn_hd_tov_out hdo,
      spr_tov spt, spr_org org
where (spt.kod = rco.tov) and
      (rco.doc = hdo.kod) and
      (hdo.ORG = org.kod) and
      (rco.cnt > 0 ) and
      (org.grp in (select gr.kod from spr_org_groups gr
                where gr.kod = :grp_list or gr.parentid =:grp_list)) and
      (hdo.DAT = :DAT)

union all select hdo.org, org.name, spt.kod, spt.name, 0.0, rco.cnt
from  mn_rc_tov_reserv  rco, mn_hd_tov_reserv  hdo,
      spr_tov spt, spr_org org
where (spt.kod = rco.tov) and
      (rco.doc = hdo.kod) and
      (hdo.ORG = org.kod) and
      (rco.cnt > 0 ) and
      (org.grp in (select gr.kod from spr_org_groups gr
                where gr.kod = :grp_list or gr.parentid =:grp_list)) and
      (hdo.DAT = :DAT)
 ) group by o_kod,o_name,p_kod,p_name


Выдает ошибку 
Код

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 1.
select.


Если удалить строки 1, 2 и 24 работает. а вот
",группировку вынести на уровень выше." не пашет
Пробую на
Код

IB Expert - The Most Expert for InterBase, Firebird and Yaffil
Copyright (C) 2000-2009 IBExpert KG Version 2009.03.17.3

Код

Firebird 1.5


PM MAIL   Вверх
Zloxa
Дата 2.7.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 2
Всего: 161



мда... как я понял эта фишка(со странным названием "derived tables", когда все остальные это называют subquery) в птице поддерживаться началась только с версии 2.0.

На full join тут, думаю, переделать не удастся.

может на ХП удастся чтото замутить... перенесу ка я тему.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.