Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
В чем моя ошибка???
|
|||
|---|---|---|---|
|
#18+
Мастера, помогите! Я уже описывала это в одном своем сообщении. Но повторюсь. Есть БД типа paradox. Есть кадровая программа и в ней - форма отпусков по подразделению. Пользователь выбирает период дат, и по кнопке обновить в поле DBGrid выводится список сотрудников, которые имели отпуск в этот период и те, которые были приняты на работу в этот же период(не важно, были они в отпуске или нет). Я сделала отчет и в его запросе пишу следующее: select s.tabno, s.namef,s.namio, s.div, s.part, s.adiv, s.apart, o.dupr, o.dclr, o.perd, s.dcont, (sum(o.dayall)-sum(o.dayreal)) as ostat , sum(o.dayreal) as smday, sum(o.nday) as kompen from "state.db" s left join "otp.db" o on (o.Tabno=s.tabno) group by s.div, s.part, s.adiv, s.apart,s.tabno, s.namef,s.namio, o.dupr, o.dclr, o.perd, s.dcont order by s.namef,s.namio, s.dcont Здесь state.db - это таблица, в которой содержатся все данные о сотрудниках otp.db - таблица, где содержатся данные об отпусках s.tabno - табельный номер сотрудника; s.namef,s.namio - ФИО s.div, s.part, s.adiv, s.apart - дивизион, отдел, альт. дивизион, альт. отдел o.dupr - начало отпуска o.dclr - окончание отпуска o.perd - период отпуска s.dcont - дата принятия сотрудника на работу Но если так писать запрос, то при этом выводятся сотрудники, у которых был отпуск, а также все сотрудники, которые есть на этом предприятии. Они не попадают в период заданной даты. Получается так, что в DBGrid они у меня выводятся правильно, а в отчете - нет. В чем моя ошибка? Как мне необходимо изменить запрос для поставленной задачи? Подскажите, пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2003, 00:24 |
|
||
|
В чем моя ошибка???
|
|||
|---|---|---|---|
|
#18+
Протестировать у себя не могу, но попробуй такой вариант: select s.tabno, s.namef,s.namio, s.div, s.part, s.adiv, s.apart, o.dupr, o.dclr, o.perd, s.dcont, (sum(o.dayall)-sum(o.dayreal)) as ostat , sum(o.dayreal) as smday, sum(o.nday) as kompen from "state.db" s left join "otp.db" o on (o.Tabno=s.tabno) where ((o."dupr" >= :StartDate) and (o."dupr" <= :EndDate)) or ((s."dcont" >= :StartDate) and (s."dcont" <= :EndDate)) :StartDate, :EndDate это паремтры. Можно использовать ParamByName или можете вместо них просто строковые констатны вставить ("mm-dd-yyyy"), кому как нравиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2003, 10:55 |
|
||
|
В чем моя ошибка???
|
|||
|---|---|---|---|
|
#18+
Вы писали Код: plaintext 1. 2. Запрос возвращает ВСЕХ сотрудников потому что LEFT JOIN - это вариант внешнего объединения при котором у вас выбираются ВСЕ записи из ведущей таблицы (state.db) и записи из второй таблицы (otp.db) удовлетворяющие заданному условию объединения (o.Tabno=s.tabno). Для получения правильного результа попробуйте написать так: Код: plaintext 1. 2. 3. 4. либо, что эквивалентно, используйте для объединения таблиц INNER JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2003, 23:34 |
|
||
|
В чем моя ошибка???
|
|||
|---|---|---|---|
|
#18+
сделай вместо LEFT JOIN INNER JOIN для того чтобы выбрать отпускников потом Union и select для прибывших на работу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2003, 16:38 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=1975&tid=2115572]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 356ms |

| 0 / 0 |
