Главная страница
    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.46 MB
Время: 0.036 c
4-1092411169
TeNY
2004-08-13 19:32
2004.09.26
SPTI где можно достать компонент или заголовочный файл


1-1094550933
ZDenis
2004-09-07 13:55
2004.09.26
Помогите разобраться с ООП


9-1084354810
AxxxE
2004-05-12 13:40
2004.09.26
Смотрим через "камеру" на плоскость


14-1094741972
X9
2004-09-09 18:59
2004.09.26
Философия


3-1093872223
sloug
2004-08-30 17:23
2004.09.26
Дата с повторениями





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский