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

Вниз

В очередной раз рискну разместить здесь вакансию   Найти похожие ветки 

 
Igorek ©   (2006-03-16 14:13) [200]


> Курдль ©   (16.03.06 11:51) [189]

Типа такого:
select
o.*,
r.OrderRequestAmount,
p.OrderPaymentAmount,
jp.jpName
from A as o
left join (
select
 sum(Amount) as OrderRequestAmount,
 orderID
from B
group by orderID
) as r on o.ID = r.orderID
left join (
select
 sum(Amount) as OrderPaymentAmount,
 orderID
from C
group by orderID
)  as p on o.ID = p.orderID
left join (
select
 ac.orderID,
 jp.[Name] as jpName
from D as ac
left join E as jp on ac.ID = jp.accountID
) as jp on o.ID = jp.orderID


 
Курдль ©   (2006-03-16 14:37) [201]


> Igorek ©   (16.03.06 14:13) [200]


Замысловато...
Похоже на запрос для ранних версий оракла.
Но подозреваю, что group by будет пожирать очень много времени.
Сильно отличается от того, что я написал навскидку для "Sybase ASA" в Курдль ©   (16.03.06 10:25) [170]  (еще один мой респект Watcom!).


 
paul_k ©   (2006-03-16 14:37) [202]

Первый акт мрлезонского балета просто суммы по договорам
SELECT     t_contract.id AS contract,
          SUM(t_order.doc_sum) AS order_cum,
          SUM(t_paydoc.doc_sum) AS pay_sum
FROM         t_contract
            LEFT OUTER JOIN t_paydoc ON t_contract.id = t_paydoc.contract_id
            LEFT OUTER JOIN t_order ON t_contract.id = t_order.contract_id
GROUP BY t_contract.id

Второй акт с подбором имени физика 2 варианта
SELECT     t_contract.id AS contract, SUM(t_order.doc_sum) AS order_cum, SUM(t_paydoc.doc_sum) AS pay_sum, t_person_j.id AS Expr1,
                     t_person_f.f_name
FROM         t_contract LEFT OUTER JOIN
                     t_account ON t_contract.acc_id = t_account.id LEFT OUTER JOIN
                     t_order ON t_contract.id = t_order.contract_id LEFT OUTER JOIN
                     t_paydoc ON t_contract.id = t_paydoc.contract_id LEFT OUTER JOIN
                     t_person_j LEFT OUTER JOIN
                     t_person_f ON t_person_j.id = t_person_f.person_jur_id ON t_account.person_jur_id = t_person_j.id
GROUP BY t_contract.id,  t_person_f.f_name

или достаем имя физика подзапросом
SELECT     t_contract.id AS contract,
          SUM(t_order.doc_sum) AS order_cum,
          SUM(t_paydoc.doc_sum) AS pay_sum,
          (SELECT     t_person_j.id AS Expr1, t_person_f.f_name
            FROM         t_account LEFT OUTER JOIN
                     t_person_j LEFT OUTER JOIN
                     t_person_f ON t_person_j.id = t_person_f.person_jur_id ON t_account.person_jur_id = t_person_j.id
            where t_account.id = t_contract.acc_id
           ) as F_Name
FROM         t_contract
            LEFT OUTER JOIN t_paydoc ON t_contract.id = t_paydoc.contract_id
            LEFT OUTER JOIN t_order ON t_contract.id = t_order.contract_id
GROUP BY t_contract.id


 
paul_k ©   (2006-03-16 14:45) [203]

вроде не сильно налажал..


 
paul_k ©   (2006-03-16 14:48) [204]

не таки налажал.. откуда то взял что "Р/С в договоре может отсутствовать" мдя
тогда тока так
SELECT     t_contract.id AS contract, SUM(t_order.doc_sum) AS order_cum, SUM(t_paydoc.doc_sum) AS pay_sum, t_person_j.id AS Expr1,
                     t_person_f.f_name
FROM         t_contract INNER JOIN
                     t_account ON t_contract.acc_id = t_account.id LEFT OUTER JOIN
                     t_order ON t_contract.id = t_order.contract_id LEFT OUTER JOIN
                     t_paydoc ON t_contract.id = t_paydoc.contract_id LEFT OUTER JOIN
                     t_person_j LEFT OUTER JOIN
                     t_person_f ON t_person_j.id = t_person_f.person_jur_id ON t_account.person_jur_id = t_person_j.id
GROUP BY t_contract.id, t_person_f.f_name


 
Igorek ©   (2006-03-16 15:25) [205]


> Курдль ©   (16.03.06 14:37) [201]
> Но подозреваю, что group by будет пожирать очень много времени.

Можно подозревать что угодно, но оптимальнее не напишешь. Эти подзапросы не связаны с внешним, потому работают оптимально. Кроме того этот весь запрос хорошо распаралеливается - еще один плюс за то что-бы для сервера купить многопроцессорную железяку.


 
paul_k ©   (2006-03-17 09:30) [206]

> [189] Курдль ©   (16.03.06 11:51)

и что, я сосвсем лажу написал? или как?


 
Курдль ©   (2006-03-17 10:01) [207]


> paul_k ©   (17.03.06 09:30) [206]
> и что, я сосвсем лажу написал? или как?


Извини, не проверял :) Как-нить на досуге на реальной базе посмотрю, а то ныне у меня, как у Винни Пуха: "... в голове опилки и длинные слова меня только огорчают" :)

Я бы написал так, как  написал в [170].

Жаль, что Николай, - эксперт по супер-запросам, не проявил интереса к нашим попыткам.


 
paul_k ©   (2006-03-17 11:21) [208]

> [207] Курдль ©   (17.03.06 10:01)

Так у Николая сейчас другое. Ему бы работника найти:)


 
Nikolay M. ©   (2006-03-17 11:24) [209]


> Курдль ©   (17.03.06 10:01) [207]
> Жаль, что Николай, - эксперт по супер-запросам, не проявил
> интереса к нашим попыткам.


Под..под.. подколол :)))
Павел прав - мне бы сейчас действительно продержаться до выхода нового сотрудника :) И так уже на двух стульях сижу. Так что вы уж пока без меня как-нибудь :)


 
Danilka ©   (2006-03-17 16:32) [210]

[205] Igorek ©   (16.03.06 15:25)
Ню-ню.
Таки да, твои подзапросы карашо распаралеливается, однако, потом они все соединяюцца с таблицей договоров и чего там говорит план запроса, скока это будет стоить?
Кроме того, в реальной ситуации редко когда требуется инфа по всем договорам, скорее всего потребуется либо по открытым, либо за период, либо по тем, у которх есть неоплаченый остаток.
Для первых двух, таки, вытаскивать суммы будет намного оптимальнее, чем твой вариант с добавлением условий.
Третий вариант, тут лучше ввести регистр, по которому и фильтровать.


 
paul_k ©   (2006-03-20 11:01) [211]

Да, Есть подозрение, что я присоеденюсь к Николаю в поиске людей....


 
Nikolay M. ©   (2006-03-20 11:07) [212]


> paul_k ©   (20.03.06 11:01) [211]


Конкурент???


 
paul_k ©   (2006-03-20 11:14) [213]

А как же...
Вот вроде просят троих человек подобрать. Как всегда. SQL, хоть поверхностные знания о бухгалтерии бумагах, документообороте.
Точнее - должны требования на днях предоставить.
от попробую поработать хедхантером в свободное время


 
Nikolay M. ©   (2006-03-20 11:21) [214]


> paul_k ©   (20.03.06 11:14) [213]
> от попробую поработать хедхантером в свободное время


Имхо, сейчас не сезон - все, кто хотел, поувольнялся после НГ и уже нашли теплые места. Глянь на скульру: на несколько страниц вакансий приходится всего пара штук резюме.


 
paul_k ©   (2006-03-20 11:41) [215]

ээээ... сейчас студиозусы дипломы дописывають. От их и поставлено целью ловить:)


 
paul_k ©   (2006-03-20 11:43) [216]

кстати, не скинешь свою задачку на почту? крнкуренту:)


 
Nikolay M. ©   (2006-03-20 11:53) [217]


> ээээ... сейчас студиозусы дипломы дописывають. От их и поставлено
> целью ловить:)


Ууу.. Сочуйствую.
Только вот этого не бери

http://www.sql.ru/forum/actualthread.aspx?tid=266933&pg=1
http://www.sql.ru/forum/actualthread.aspx?tid=251058

А то увольнять потом замучаешься :)))

Если найду задачку, что я студентам давал - кину. То, что я сейчас даю, для студиотузов будет сложновато.


 
paul_k ©   (2006-03-20 11:59) [218]

> Если найду задачку, что я студентам давал - кину. То, что
> я сейчас даю, для студиотузов будет сложновато.

Студиозус студиозусу люпус эст:)
все давай. :) В свою очередь обещаю, что как только до своих тестов доберусь обязательно перешлю в ответ


 
Nikolay M. ©   (2006-03-20 12:09) [219]


> paul_k ©   (20.03.06 11:59) [218]


Ушло на анкетное мыло.



Страницы: 1 2 3 4 5 6 вся ветка

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

Наверх




Память: 1.03 MB
Время: 0.075 c
15-1142583574
Курдль
2006-03-17 11:19
2006.04.09
С праздником!!!


6-1135287504
Rouse_
2005-12-23 00:38
2006.04.09
10022 ошибка... Забавно.


1-1141375130
mss
2006-03-03 11:38
2006.04.09
Как это сделать


15-1142921086
Ega23
2006-03-21 09:04
2006.04.09
С Днём рождения! 21 марта


15-1142687201
Новочеркасский Волк
2006-03-18 16:06
2006.04.09
2 месяца не могу понять в чём ошибка?!?!?