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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Неинформативное название "Выборка"
Старый 25.02.2009, 22:44   #1
Minotavr_x86
Пользователь
 
Аватар для Minotavr_x86
 
Регистрация: 22.03.2007
Сообщений: 24
По умолчанию Как правильно сделать выборку

Есть таблицы Персонал(id,ФИО,адр,...) и Табель(месяц,id,отработанное время)
Нужно SQL-запросом получить следующее
ФИО |июнь|июль|август|
Иванов|12 |21 |32 |
Петров|12 |14 |0 |
На любом интервале месяцев.
Не всё получается так, как придумал,
Но разве за это должно быть стыдно!?!
Minotavr_x86 вне форума Ответить с цитированием
Старый 25.02.2009, 23:00   #2
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

Join и group by тебе в помощь.формируй запрос динамически и подставляй свои значения.
вступлю в команду разработчиков ПО на Delphi

Последний раз редактировалось maladoy; 26.02.2009 в 07:43.
maladoy вне форума Ответить с цитированием
Старый 25.02.2009, 23:58   #3
Minotavr_x86
Пользователь
 
Аватар для Minotavr_x86
 
Регистрация: 22.03.2007
Сообщений: 24
По умолчанию

Это получится:
Иванов июль 12
Иванов август 14
А мне надо:
Иванов 12 14
Не всё получается так, как придумал,
Но разве за это должно быть стыдно!?!
Minotavr_x86 вне форума Ответить с цитированием
Старый 26.02.2009, 02:49   #4
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

Весьма похожая задача здесь http://www.programmersforum.ru/showt...938#post210938

Там по ссылкам есть еще темы и в них есть полезное по вопросу.

А вообще стоит указывать СУБД, это иногда многое может определить.
Антон Ю.Б. вне форума Ответить с цитированием
Старый 26.02.2009, 10:59   #5
Minotavr_x86
Пользователь
 
Аватар для Minotavr_x86
 
Регистрация: 22.03.2007
Сообщений: 24
По умолчанию

У меня Access и Delphi 7.
http://www.programmersforum.ru/...938#post210938 Вот это мне вроде подходит, но разобратся в запросе не могу.
Не всё получается так, как придумал,
Но разве за это должно быть стыдно!?!
Minotavr_x86 вне форума Ответить с цитированием
Старый 26.02.2009, 11:32   #6
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Цитата:
Сообщение от Minotavr_x86 Посмотреть сообщение
Есть таблицы Персонал(id,ФИО,адр,...) и Табель(месяц,id,отработанное время)
Нужно SQL-запросом получить следующее
ФИО |июнь|июль|август|
Иванов|12 |21 |32 |
Петров|12 |14 |0 |
На любом интервале месяцев.
скажите, а вот эти числа 12 |21 |32 откуда берутся и что они означают?
фЁдОр вне форума Ответить с цитированием
Старый 26.02.2009, 14:17   #7
Minotavr_x86
Пользователь
 
Аватар для Minotavr_x86
 
Регистрация: 22.03.2007
Сообщений: 24
По умолчанию

Цифры означают сколько дней в месяце отработал данный сотрудник и берутся из таблицы Табель.
Не всё получается так, как придумал,
Но разве за это должно быть стыдно!?!
Minotavr_x86 вне форума Ответить с цитированием
Старый 03.03.2009, 08:34   #8
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

видете ли, вся ваша трудность заключается в том, что вы значение поля Месяц, хотите вывести как название полей. Грид не может в "шапке" выводить значение поля, хотя если кому-то интересно, то может и предложит извращенческий вариант. другое дело если пораотать со стрингридом, то там уже можно как-нибудь извратиться, но это тоже извращенство. в общем в таких вариантах будет проще воспользоваться компонентом датапикчер, от туда выбирать месяц и смотреть кто сколько отработал. может кто еще какие варианты предложит?
фЁдОр вне форума Ответить с цитированием
Старый 03.03.2009, 09:46   #9
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

Minotavr_x86
Цитата:
У меня Access и Delphi 7.
http://www.programmersforum.ru/...938#post210938 Вот это мне вроде подходит, но разобратся в запросе не могу.
если у вас еще не получилось то там смысл такой:
пишите запрос:

Код:
TRANSFORM  Sum(Запрос1.[отработанное время]) as [sum]
SELECT Запрос1.[ФИО]
FROM Запрос1
GROUP BY Запрос1.[ФИО ]
PIVOT Format([месяц],"mmm") In ("янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек");
где запрос1 - это запрос по которому у вас получилась выборка:
Цитата:
Это получится:
Иванов июль 12
Иванов август 14
то что вам советовал
Цитата:
maladoy
Tanuska___:) вне форума Ответить с цитированием
Старый 04.03.2009, 19:56   #10
Minotavr_x86
Пользователь
 
Аватар для Minotavr_x86
 
Регистрация: 22.03.2007
Сообщений: 24
По умолчанию

Ура!!! получилось.
Вот запрос
Код:
TRANSFORM SUM(den)
SELECT fam
FROM   Personal,Tabel WHERE Personal.nom=Tabel.nom
GROUP BY fam 
PIVOT  mes
Так и не понял зачем в запросе сумма.
Теперь возник еще один вопрос как вывести в месяце 2 поля:
дней работал и дней болел?
Мне нужен только запрос.
Не всё получается так, как придумал,
Но разве за это должно быть стыдно!?!
Minotavr_x86 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, как правильно сделать страничку чтобы ее видели поисковики kutt HTML и CSS 5 02.10.2008 21:04
Не могу сделать выборку с нужными полями, помогите чайнику! kadet.rus Microsoft Office Access 2 26.04.2008 14:12
Помогите сделать выборку! Adm Microsoft Office Access 1 06.02.2008 19:10
Как правильно скомпилировать программу ГОСЕАН БД в Delphi 14 26.07.2007 13:18