Текущий архив: 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.46 MB
Время: 0.036 c