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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2009, 19:01   #1
Yura_S
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 31
По умолчанию sql запрос

существует запрос:
'SELECT Сотрудники.т№, Сотрудники.фио, Sum(Продажи.сум) AS [Sum-сум], Продажи.дат FROM Сотрудники INNER JOIN Продажи ON Сотрудники.т№ = Продажи.т№ GROUP BY Сотрудники.т№, Сотрудники.фио, Продажи.дат HAVING (((Продажи.дат)=#Число/'+Edit3.Text+'/2009#));'
нужно чтобы отбиралось любое число данного месяца, подскажите пожалуста что можно сделать
Yura_S вне форума Ответить с цитированием
Старый 25.10.2009, 21:18   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а зачем дату в хевинг запхали?
добавляйте дату в условие отбора where

ну а как сгруппировать данные по месяцу мы узнаем после получения полной инфы: субд, версия?
soleil@mmc вне форума Ответить с цитированием
Старый 26.10.2009, 09:16   #3
Yura_S
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 31
По умолчанию

Зачем в Хевинг запхали, понятия не имею, шаблон запроса делал в Access
Субд Delphi 7
Я в sql очень плохо разбираюсь

Последний раз редактировалось Yura_S; 26.10.2009 в 09:26.
Yura_S вне форума Ответить с цитированием
Старый 26.10.2009, 14:46   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

HAVING используется для фильтрации сгруппированных данных по агрегатам (sum, count, avg и т.п.)
в данном примере запрос ваще нерабочий

Цитата:
Сообщение от Yura_S Посмотреть сообщение
Субд Delphi 7
кто такая?

Цитата:
Сообщение от Yura_S Посмотреть сообщение
Я в sql очень плохо разбираюсь
это уже видно

может, наберетесь решимости и выясните какая же субд у вас? может тот самый Access?!
soleil@mmc вне форума Ответить с цитированием
Старый 26.10.2009, 15:36   #5
Yura_S
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 31
По умолчанию

СУБД Access, я немного перепутал.... Запрос полностью рабочий, я его реализовал через ADOQuery в Delphi 7, единственное он отбирает записи по точной дате, тоесть учитывает и число, а мне нужно сделать так чтобы отбирались все числа месяца...
В запросе у меня есть "sum" возможно по этому и HAVING, ошибки быть не должно, как я уже говорил этот запрос был составлен в конструкторе запросов

Последний раз редактировалось Yura_S; 26.10.2009 в 16:13.
Yura_S вне форума Ответить с цитированием
Старый 27.10.2009, 12:26   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

действительно
в хэвинг и обычное условие работает, но эта какая-то фича

теперь по вопросу:
чтобы показать продажи с группировкой по месяцу-году из указанной даты нужно эту дату урезать до месяц-год
и чтобы запрос показал все продажи за месяц нужно убрать саму дату из выборки и группировки
например, в оракле такой запрос будет выглядеть так (поля обозвал по-другому, но суть ясна)
Код:
with
  emp as (
  select 1 emp_id, 'Pupkin' fio from dual union all
  select 2, 'Ivanov' from dual union all
  select 3, 'Petroff' from dual union all
  select 4, 'Sidoroff' from dual union all
  select 5, 'Galkin' from dual union all
  select 6, 'Zyabroff' from dual
  ),
  sales as (
  select 1 emp_id, to_date('01.10.2009', 'DD.MM.YYYY') sale_date, 1500 amount from dual union all
  select 1, to_date('02.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 1, to_date('03.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 2, to_date('01.10.2009', 'DD.MM.YYYY'), 500 from dual union all
  select 1, to_date('02.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 1, to_date('03.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 3, to_date('01.10.2009', 'DD.MM.YYYY'), 800 from dual union all
  select 4, to_date('01.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 5, to_date('01.10.2009', 'DD.MM.YYYY'), 200 from dual union all
  select 1, to_date('02.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 6, to_date('01.10.2009', 'DD.MM.YYYY'), 15000 from dual union all
  select 1, to_date('01.10.2009', 'DD.MM.YYYY'), 2000 from dual union all
  select 1, to_date('03.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 2, to_date('01.10.2009', 'DD.MM.YYYY'), 3500 from dual union all
  select 3, to_date('01.10.2009', 'DD.MM.YYYY'), 5500 from dual union all
  select 1, to_date('02.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 4, to_date('01.10.2009', 'DD.MM.YYYY'), 8500 from dual union all
  select 1, to_date('03.10.2009', 'DD.MM.YYYY'), 1500 from dual union all
  select 5, to_date('01.10.2009', 'DD.MM.YYYY'), 500 from dual union all
  select 6, to_date('01.10.2009', 'DD.MM.YYYY'), 6500 from dual union all
  select 1, to_date('01.10.2009', 'DD.MM.YYYY'), 9500 from dual union all
  select 1, to_date('03.10.2009', 'DD.MM.YYYY'), 1500 from dual
  )

select 
  e.emp_id, 
  e.fio,
  sum(s.amount) sale_amount
from emp e inner join sales s on e.emp_id = s.emp_id
where 0=0
  and trunc(s.sale_date, 'mm') = trunc(to_date('01.10.2009', 'DD.MM.YYYY'), 'mm')
group by e.emp_id, e.fio
order by e.fio
если нужно показать все продажи в месяце с группировкой по сотрудникам, то дату возвращаем (получим сгруппированные продажи по сотрудникам на все даты, в которых были продажи)
Код:
select 
  e.emp_id, 
  e.fio, 
  s.sale_date,
  sum(s.amount) sale_amount
from emp e inner join sales s on e.emp_id = s.emp_id
where 0=0
  and trunc(s.sale_date, 'mm') = trunc(to_date('01.10.2009', 'DD.MM.YYYY'), 'mm')
group by e.emp_id, e.fio, s.sale_date
order by e.fio
теперь про trunc()
наверняка в access-е такой нет
но точно есть какой-нить substr, substring (обязательно вникнуть в синтаксис функи)
вот их и использовать в условии отбора
Код:
substr(s.sale_date, 4, 6) = substr('01.10.2009', 4, 6)
soleil@mmc вне форума Ответить с цитированием
Старый 27.10.2009, 15:56   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
теперь про trunc()
наверняка в access-е такой нет
нет. и, если мне не изменяет память, там в этих целях можно использовать банальный INT(Поле_Дата)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
sql запрос fobass БД в Delphi 21 03.07.2009 07:22
sql запрос viperrr БД в Delphi 1 04.06.2009 22:48
SQL запрос Юлёк PHP 4 29.01.2008 17:35
SQL запрос SERG1980 БД в Delphi 6 19.10.2007 23:03
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15