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

Вниз

Помогите составить SQL   Найти похожие ветки 

 
Stupid   (2004-08-31 16:19) [0]

Есть такой запрос :


AM.TmQuery.SelectSQL.Add("SELECT Id_Pr, CP_Num, Pr_PNum, Pr_Nos, Pr_Stund, Pr_MStund, Pr_PNDat, Pr_NDarb,");
AM.TmQuery.SelectSQL.Add("Pr_Cena, Pr_FCena, Pr_TCena, Pr_MCena, Pr_PCena, Pr_PVCena, Pr_CCena,");
AM.TmQuery.SelectSQL.Add("Sum(TS_St), Sum(TS_St*TS_Koef)");
AM.TmQuery.SelectSQL.Add("FROM Projekt, Sub_Kon, Time_Sh");
AM.TmQuery.SelectSQL.Add("WHERE Projekt.Id_Pr = Sub_Kon.Id_Pr and");
AM.TmQuery.SelectSQL.Add("Sub_Kon.Id_SKon = Time_Sh.Id_SKon and");
AM.TmQuery.SelectSQL.Add("GROUP By Id_Pr, CP_Num, Pr_PNum, Pr_Nos, Pr_Stund, Pr_MStund, Pr_Cena, Pr_FCena, Pr_TCena, Pr_MCena, Pr_PCena, Pr_PVCena, Pr_CCena, Pr_PVN, Pr_PNDat, Pr_NDarb");
AM.TmQuery.SelectSQL.Add("ORDER By CP_Num, Id_Pr");


но понадобилось выбирать и те записи, для которых нет ничего в таблице Time_SH.
Как это правильно сделать?


 
Val ©   (2004-08-31 16:22) [1]

использовать внешнее объединение


 
guest_Dmitry   (2004-08-31 16:59) [2]

использовать оператор exists


 
Stupid   (2004-08-31 17:04) [3]

Я в запросах не силён, прочитал про дуае join и union, но так и не понял как их применять в моём случае.
подскажите пожалуйста, если не трудно!


 
Stupid   (2004-08-31 17:41) [4]

попробовал такое, но это вешалка на 20 минут

SELECT Id_Pr, CP_Num, Pr_PNum, Pr_Nos, Pr_Stund, Pr_MStund, Pr_PNDat, Pr_NDarb,
Pr_Cena, Pr_FCena, Pr_TCena, Pr_MCena, Pr_PCena, Pr_PVCena, Pr_CCena, Pr_PVN,
Sum(TS_St), Sum(TS_St*TS_Koef)
FROM Projekt, Sub_Kon, Time_Sh
WHERE Projekt.Id_Pr = Sub_Kon.Id_Pr and
Sub_Kon.Id_SKon = Time_Sh.Id_SKon and
Time_Sh.Ts_Dat >= "01.08.2004" and
Time_Sh.Ts_Dat <= "31.08.2004" and
Sub_Kon.SKon_Mont = 0 and
(Projekt.Pr_NDarb is Null or
Projekt.Pr_NDarb > "31.08.2004") and
(Projekt.Pr_PNDat is Null or
Projekt.Pr_PNDat > "31.08.2004") and
Time_Sh.Ts_Koef > 0
GROUP By Id_Pr, CP_Num, Pr_PNum, Pr_Nos, Pr_Stund, Pr_MStund, Pr_Cena, Pr_FCena, Pr_TCena, Pr_MCena, Pr_PCena, Pr_PVCena, Pr_CCena, Pr_PVN, Pr_PNDat, Pr_NDarb

UNION

SELECT Id_Pr, CP_Num, Pr_PNum, Pr_Nos, Pr_Stund, Pr_MStund, Pr_PNDat, Pr_NDarb,
Pr_Cena, Pr_FCena, Pr_TCena, Pr_MCena, Pr_PCena, Pr_PVCena, Pr_CCena, Pr_PVN,
Cast(0 As Double Precision), Cast(0 As Double Precision)
FROM Projekt, Sub_Kon
WHERE Projekt.Id_Pr = Sub_Kon.Id_Pr and
Not Exists (Select Id_SKon From Time_SH Where Time_SH.Id_SKon = Sub_Kon.Id_SKon) and
Time_Sh.Ts_Dat >= "01.08.2004" and
Time_Sh.Ts_Dat <= "31.08.2004" and
Sub_Kon.SKon_Mont = 0 and
(Projekt.Pr_NDarb is Null or
Projekt.Pr_NDarb > "31.08.2004") and
(Projekt.Pr_PNDat is Null or
Projekt.Pr_PNDat > "31.08.2004")


 
guest_Dmitry   (2004-08-31 17:53) [5]

приведи структуры и связи таблиц Projekt, Sub_Kon, Time_Sh
и что тебе в резутьтате получить нужно.


 
stud ©   (2004-08-31 17:54) [6]


> AM.TmQuery.SelectSQL.Add("Sub_Kon.Id_SKon = Time_Sh.Id_SKon
> and");

lef outer join time_sh on (sub_kon.id=time_sh.id_skon)


 
Stupid   (2004-08-31 18:09) [7]

Есть таблицы
Projekt (Id_Pr, Pr_Num, ...)
под ней
Sub_Kon (Id_SKon, SKon_Num, Id_Pr, ...)
под ней
Time_SH (Id_TS, TS_ST, Id_SKon, ...)

Требуется выбрать все записи из Proekt, для которых есть записи в Sub_Kon, и для каждого Sub_Kon собрать сумму часов SUM(TS_ST) из Time_SH, если есть, если нет - 0;


 
guest_Dmitry   (2004-08-31 18:22) [8]

select p.id_pr, p.pr_num, s.id_skon, s.skon_num, s.id_pr,
 (select sum(t.ts_st) from time_sh t where t.id_skon =
   s.id_skon)
from project p, sub_kon s
 where p.id = s.id_skon and <.....>
group by p.id_pr, p.pr_num, s.id_skon, s.skon_num, s.id_pr

если верно понял структуру твоих таблиц, то так


 
Val ©   (2004-08-31 18:53) [9]

>[8] guest_Dmitry   (31.08.04 18:22)
не путайте человека



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

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

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1094816172
bon
2004-09-10 15:36
2004.09.26
AutoCad


1-1094588788
Антон
2004-09-08 00:26
2004.09.26
Подскажите как сделать тест с возможностью нескольких ответов.


4-1092209959
Rouse_
2004-08-11 11:39
2004.09.26
Глюк с завершением сервиса...


3-1093847410
Artem123
2004-08-30 10:30
2004.09.26
Работа с TBookmark ?


1-1095087410
M-Alex
2004-09-13 18:56
2004.09.26
Математические операции