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

Вниз

Сложный SQL-запрос   Найти похожие ветки 

 
Kostafey ©   (2006-12-22 14:52) [0]

Уважаемые мастера ! Помоготе пожалуйста составить SQL-запрос

Есть слудующие таюлицы:
ZVK1 - сведния о заявках
ZVK41 - сведения о боевой работе
PCH - сведения о названии части

Необходимо составить запрос, который бы показвал сколько стволов того или иного типа исползуется той или иной частью.
Тип ствола ZVK41.TS1, количество стволов, использованных на одном пожаре ZVK41.KS1

Именно то, что на одном пожаре может быть использовано больше одного ствола и составляет главную сложность.
Т.е. одним count() все не решается.

Таблицы ZVK1 и ZVK41 связаны по полю N_ZVK

Итак, ести предположить, что на пожаре может быть использовано или 1 или 2 ствола, то запрос мог бы иметь следующий вид:

select                                                                          
p.PCH_NAME,

case
when (z1.zcnt is null) and (z2.zcnt is null) then 0
when (z1.zcnt is null) then z2.zcnt
when (z2.zcnt is null) then z1.zcnt
else  z1.zcnt+z2.zcnt
end as Kol1
                                                   
from                                                                            
PCH p        
                                                               
--Тип ствола 1, количество стволов 1
LEFT JOIN (                                                                    
select z.PCH_COD,  count(z.PCH_COD) zcnt
from ZVK1 z, ZVK41 z41
where (z.N_ZVK=z41.N_ZVK)
  and (z41.TS1=1)
  and (z41.KS1>=1)
group by                                                                      
 z.PCH_COD
) z1 ON z1.PCH_COD= p.PCH_COD

--Тип ствола 1, количество стволов 2
LEFT JOIN (                                                                    
select z.PCH_COD,  count(z.PCH_COD) zcnt
from ZVK1 z, ZVK41 z41
where (z.N_ZVK=z41.N_ZVK)
  and (z41.TS1=1)
  and (z41.KS1>=2)
group by                                                                      
 z.PCH_COD
) z2 ON z2.PCH_COD= p.PCH_COD

order by  p.PCH_NAME                                                        


Этот код успешно выполняется, но если предположить, что на пожаре может быть использовано до 10 (в редких случаях даже больше) стволов
одного типа, то составить такой запрос уже не так просто.
Возможно есть более рациональный путь чем то что я привел выше  ?


 
Kostafey ©   (2006-12-22 15:10) [1]

Чуть не забыл СУБД SQL Server 2005


 
Kostafey ©   (2006-12-23 00:38) [2]

А ладно ! Решил проблему влоб:

for i:=1 to 10
 //.................



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
15-1165935162
Гарри Поттер
2006-12-12 17:52
2007.01.14
Монтаж локальной сети. Склько может стоить?


2-1166636937
olevacho_
2006-12-20 20:48
2007.01.14
проблемма с rediobutton-ами


3-1161622321
Kolan
2006-10-23 20:52
2007.01.14
Связь один-к-одному SQL Server. Как? И нужна ли она мне?


6-1155646376
Hitriy_r60
2006-08-15 16:52
2007.01.14
Webbrowser1 должен загружать только текст. Как сделать?


15-1167016780
Австралия
2006-12-25 06:19
2007.01.14
Что на заставке Google делают кенгуру ?