Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Вниз

Группировка записей   Найти похожие ветки 

 
Juice ©   (2005-06-10 12:41) [0]

Чисто логическая такая задача, обусловленная только здоровым интересом и полным остуствием своих мозгов в данный момент (приболел малость, ужасный насморк, голова вообще не варит). Есть некая выборка join"ом из нескольких таблиц, и есть в ней поле order. Так-вот, задача состоит в том, что все строки где это поле order содержит одинаковое значение нужно сгруппировать - группировка тут означает оставить вместо всех таких строк лишь одну, где некоторые поля поля суммируются, некоторые оставляются как есть (они одинаковые у всех).
Типа такого :
A,A,A, B, C,C, D  ---->
A, B, C, D
Сделать можно по-разному, но то, что мне приходит в мою больную голову кажется очень не красивым. Можно ли сделать это исключительно при помощи sql (firebird старой версии без поддержки вложеных запросов)?


 
Sergey13 ©   (2005-06-10 12:43) [1]

Group by тебе в помощь.


 
Juice ©   (2005-06-10 16:39) [2]


select
   count(orderid) as grouped,
   min(ORDERID),
   min(ORDERTYPEID),
   min(REGRUNSID),
   min(REGPAYSID),
   min(MARKETTYPEID),
   min(CURRENCYTYPEID),
   min(OPERATORID),
   min(AGENTID),
   min(CAGENTID),
   min(CONTRAGENTID),
   min(CCONTRAGENTID),
   min(ISSUEID) as issueid,
   min(COMISORDERID),
   min(ORDERDATE),
   min(REGISTRATIONDATE),
   min(EXTERNALNUMBER),
   min(AGENTNUMBER),
   min(AGENTLETTER),
   min(PORTF4AGENT),
   min(CONTRAGENTNUMBER),
   min(CONTRAGENTLETTER),
   min(PORTF4CONTRAGENT),
   min(ORDERSUMMA),
   min(RUNSUMMA),
   min(COMISPROFIT),
   min(PLANPAYMENT),
   min(PLANREGISTER),
   min(ORDEREXTERNNUMBER),
   min(NOTES),
   min(ORDERQUANTITY),
   min(CARDDATE),
   min(ACCOUNTNUMBER),
   min(COMISPAYACTDATE),
   min(ORDERSTOPDATE),
   min(CONDITIONTYPEID),
   min(OPERATORMARK),
   min(SERVICETYPEID),
   min(REQUESTTYPE),
   min(REQUESTNUMBER),
   min(AGENTPORTFOLIOTYPEID),
   min(CONTRAGENTPORTFOLIOTYPEID),
   min(SECONDARY),
/* --------acts -------------- */
   min(ACTID),
   min(ORDERID),
   min(EXTRACTPLACEID),
   min(EXTRACTDATE),
   sum(EXTRACTQUANTITY),
   sum(ACTSUMMA),
   min(ACTNUMBER),
   min(RSACTDATE DATE,
   min(GIVEORDERDATE),
   min(OWNERCERTDATE),
   min(ACTNOTES),
   min(OPERATORID),
   min(OPERATORMARK),
   min(REESTRATORID),
   min(AGENTPORTFDATE),
   min(CONTRAGENTPORTFDATE),
   min(FREEEXTRACTQUANTITY);

from orders o inner join acts a on o.ORDERID=a.orderid
where (o.agentid=:id or o.contragentid=:id) and a.rsactdate=:day
group by o.orderid
having o.ordertypeid in ("-3, -2")


Выборка то, что надо группирует, однако она возвращает только сгруппированые запсиси! Ведь признак having o.ordertypeid in ("-3, -2") относится только к группировке и если он не выполняется то строка ведь также должна возвращаться, просто она не будет группироваться?


 
Stanislav ©   (2005-06-10 16:56) [3]

Having значит отобрать после группировки.


 
Juice ©   (2005-06-10 17:15) [4]

Так спрашивается зачем тогда нужен having если есть where ? Я думаю что условие having работает только с группировкой и все что под него не попадает просто не группируется. Я ошибаюсь ? Если так то какой таки в нем смысл ?


 
Juice ©   (2005-06-10 17:19) [5]

Сори - написал прошлый пост не прочитав предыдущего.
Но тогда вопрос - как задать критерий группировки (и можно ли вообще?), напр. чтобы группировались только те у которых o.ordertypeid in ("-3, -2")


 
evvcom ©   (2005-06-10 17:40) [6]

select o.ordertypeid, sum(...)
from ...
where o.ordertypeid in (-3, -2)
group by o.ordertypeid
union
select o.ordertypeid, ...
from ...
where o.ordertypeid not in (-3, -2)



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

Форум: "Базы";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
6-1113399588
MegaVolt
2005-04-13 17:39
2005.07.25
Ping при количестве потоков >6 работает некорректно


14-1119806609
Гарри Поттер
2005-06-26 21:23
2005.07.25
Надо ли вводить сухой закон?


1-1120629519
Zhekson
2005-07-06 09:58
2005.07.25
документация по RaveReport


1-1120939645
ronyn
2005-07-10 00:07
2005.07.25
Как менять цвет при XP Manifest?


14-1120371700
Anvar
2005-07-03 10:21
2005.07.25
Программист-стажер, Delphi. Никто не хочет поработать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский