Главная страница
    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.03 c
14-1094705445
DSK
2004-09-09 08:50
2004.09.26
Как компонент сделать прозрачным?,наследник TWinControl


14-1094377822
Baron
2004-09-05 13:50
2004.09.26
Кто играл на деньги


4-1092484250
leonidus
2004-08-14 15:50
2004.09.26
Функция определения свободного места на винте


1-1094635659
off
2004-09-08 13:27
2004.09.26
Правильная отрисовка канвы при скролинге


3-1093420208
Евген
2004-08-25 11:50
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский