Главная страница
    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.047 c
4-1092192967
Goorus
2004-08-11 06:56
2004.09.26
Окно


8-1088672139
Tatarin
2004-07-01 12:55
2004.09.26
Эквалайзер


1-1094734605
Ivolg
2004-09-09 16:56
2004.09.26
ListView


6-1090301549
Eagle
2004-07-20 09:32
2004.09.26
Socket PORT


4-1092583943
фантазер
2004-08-15 19:32
2004.09.26
hBitmap





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