Показать сообщение отдельно
Старый 28.10.2003, 15:25     # 2
SpacerV
Guest
 
Сообщения: n/a

Вот чего у меня получилось:
главная идея в том, чтобы избавиться от JOIN потому, как этот вариант мне выгодным не кажется (сначала делаем гигантскую таблицу по условиям через JOIN, а потом на нее еще условия накладываем - долго).

SELECT Sotrudniki.So_Family Фамилия, Sotrudniki.So_Name И, Sotrudniki.So_Otchestvo О,
Sotrudniki.So_Tabel_Num Sotrudniki."Таб. №", Dolgnosti.D_Name Должность,
Sostav_otdelov.Sos_Razryad Разряд, COUNT( T.T_Label_Code ) T."Дни явок",
SUM( T.T_Label_Code ) Отработано, COUNT( T2.T_Label_Code ) T2."Дни неявок"
FROM "Sotrudniki.DB" Sotrudniki, "Sostav_Otdelov.DB" Sostav_otdelov,
"Dolgnosti.DB" Dolgnosti, "Tabel.DB" Tabel, "Tabel.DB" T, "Tabel.DB" T2
WHERE Sotrudniki.So_Code = Sostav_otdelov.Sos_Sotrudnik_Code AND
Sostav_otdelov.Sos_Dolgnost_Code = Dolgnosti.D_Code AND
Tabel.T_Sotr_Code = Sostav_otdelov.Sos_Sotrudnik_Code AND
/* Если в таблице "Tabel.DB" нет PRIMARY KEY, то самое время его туда добавить следующие 2 условия заменятся на 1 */
T.T_Sotr_Code = Tabel.T_Sotr_Code AND T.T_Data = Tabel.T_Data AND T.T_Label_Code < 9 AND
/* Тоже самое насчет PRIMARY KEY */
T2.T_Sotr_Code = Tabel.T_Sotr_Code AND T2.T_Data = Tabel.T_Data AND T2.T_Label_Code > 8 AND
/* По стандарту (вроде ;-) ) SQL92 оно и без CAST должно работать */
Tabel.T_Data BETWEEN '1.01.2003' AND '31.01.2003' AND
Sostav_otdelov.Sos_Otdel_Code = 1
GROUP BY Sotrudniki.So_Name, Sotrudniki.So_Otchestvo, Sotrudniki.So_Tabel_Num,
Sostav_otdelov.Sos_Razryad, Sotrudniki.So_Family, Dolgnosti.D_Name, Dolgnosti.D_Name