Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2017, 09:52   #1
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
Злость Сложный SQL запрос

Привет, подскажите как вынуть количество записей с уникальным полем датой? то есть есть сотрудник, есть путевой лист, и один сотрудник может выписать 2 путевых листа в день, я считал количество записей, но это оказалось не правильно ибо допустим за 8 дней он насчитал 9 выходов, а должен 8, все по тому что в один из дней он выходил 2 раза. при этом все остальные данные (время работы, пройденные км) должны суммироваться со всех записей, пока у меня получилось вот так
Код:
SELECT
s.`Табель`,
s.`ФИО`,
Sum(isnull(nz.`Время работы`)) + Sum(rp.`ВР День`)+Sum(rp.`ВР Ночь`) AS `Время работы`,
Sum(rp.`ЗП ПЛ`) AS `Оплата по тарифу`,
Sum(isnull(nz.`Работа ночью`))+Sum(rp.`ВР Ночь`) AS `Время работы ночью`,
Sum(rp.`ЗП Ночь`) AS `Оплата Ночь`,
COUNT(rp.`Индекс`) + COUNT(nz.`Индекс`) as `Выходов`,
Sum(rp.`ЗП ПЛ`)+Sum(rp.`ЗП Ночь`) as `ЗП по тарифу`,
(Sum(rp.`ЗП ПЛ`)+Sum(rp.`ЗП Ночь`))*(0.5) AS `Надбавка ЗСС`,
(Sum(rp.`ЗП ПЛ`)+Sum(rp.`ЗП Ночь`))*(0.10) as `КТУ`,
(Sum(rp.`ЗП ПЛ`)+Sum(rp.`ЗП Ночь`))+((Sum(rp.`ЗП ПЛ`)+Sum(rp.`ЗП Ночь`))*(0.10))+((Sum(rp.`ЗП ПЛ`)+Sum(rp.`ЗП Ночь`))*(0.5)) as `ЗП`
FROM
`Сотрудники` AS s
LEFT JOIN `Реестр ПЛ` AS rp ON rp.`Водитель` = s.`Индекс`
LEFT JOIN `Реестр НЗ` AS nz ON nz.`Сотрудник` = s.`Индекс`
WHERE s.`Отдел` = 23 and (rp.`ЗП ПЛ` is NOT NULL or nz.`Время работы` <> 0 )  
GROUP BY 
 s.`Табель`
ORDER BY s.`ФИО`, s.`Должность`
еще получалось делать так что он выдавал ровно 8 записей (группировка по дате) но без остальных значений
PTyTb32 вне форума Ответить с цитированием
Старый 03.10.2017, 10:28   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В LEFT JOIN например не напрямую к `Реестр ПЛ`, а к вложенному запросу, в котором выхода сгруппированы по датам и нужное просуммировано

Цитата:
Sum(isnull(nz.`Время работы`))
а это что, расшифруй
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.10.2017, 11:47   #3
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
а это что, расшифруй
есть стоит в одной из записей null то сумма будет null, а isnull позволяет читать null как 0.

за ответ спасибо, попробую.
PTyTb32 вне форума Ответить с цитированием
Старый 03.10.2017, 12:13   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

isnull(nz.`Время работы`) это в acess такой формат и возвращает кажись 0 или -1. Чего будешь делать если sum для не NULL вернет отрицательное число?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.10.2017, 12:20   #5
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
isnull(nz.`Время работы`) это в acess такой формат и возвращает кажись 0 или -1. Чего будешь делать если sum для не NULL вернет отрицательное число?
охренею от жизни, в надежде что езе не произошел расчет ЗП и пойду гуглить как из null сделать 0. Спасибо что обратили на это мое внимание)
PTyTb32 вне форума Ответить с цитированием
Старый 03.10.2017, 13:32   #6
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от PTyTb32 Посмотреть сообщение
и пойду гуглить как из null сделать 0
думаю это поможет быстрее найти ответ
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 03.10.2017, 15:25   #7
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
думаю это поможет быстрее найти ответ
О! спасибо) теперь не придется искать)
PTyTb32 вне форума Ответить с цитированием
Старый 04.10.2017, 10:18   #8
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
вложенному запросу
в селект вложенный запрос положил который возвращает количество уникальных дат, спасибо за подсказку, а то второй вариант мне не очень нравится, загрузить как есть, а потом в dbgrid заменить нужные значения, циклом на костылях
PTyTb32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложный SQL запрос nactyx SQL, базы данных 6 23.11.2015 17:28
Сложный запрос SQL irina1410 БД в Delphi 4 03.07.2012 16:46
Сложный запрос в SQL A-Lex-Is SQL, базы данных 1 10.08.2010 23:19
сложный sql запрос kate158 БД в Delphi 0 18.09.2008 11:38
Сложный SQL-запрос ole777 БД в Delphi 1 08.05.2007 20:56