Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SQL, Вывод полей в одной таблице - шапкой в другой. Heeeelp  (Прочитано 11990 раз)
0 Пользователей и 1 Гость смотрят эту тему.
iona
Гость
« : 18-06-2009 21:57 » 

Привет всем. Есть база данных на Access связанная в делфи через ADOConnection (ADOTable, DataSource, DBGrid и тд  Улыбаюсь  ). В акцесе есть таблицы 1 курс, 2 курс, 3 курс, 4 курс с полями
[ Предмет | Часы | Группа | Кафедра | Специальности ]
Поля кафедры и специальности связаны с другими отдельными таблицами (Кафедры, Специальности) по полям id_specialnosti и id_kafedri.

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

Внимание: Загвоздка вся в том, что бы наименование групп (которые относятся к выбранной кафедре) в тех таблицах (1 курс, 2 курс ...) стала шапкой таблицы - назовем ее Смета часов.

Примерно это должно вот так выглядеть

Таблица допустим возьмем 1 курс:

Шапка                          [ Предмет         | Часы | Группа       | Кафедра              | Специальности              ]
Заполненные поля       [ Математика   |    20  | ПОВТ-2       | Инф. и матем.      | Прог. обесп. выч. тех.   ]
                                     [ История          |    10  | Право-14   | Правовые дисц.    | Правоведение              ]


и возьмем таблицу 2 курс

Шапка                          [ Предмет         | Часы | Группа    | Кафедра             | Специальности                     ]
Заполненные поля       [ ОС                  |    15  | ИС - 4      |Инф. и матем.      | Информационные сис.          ]
                                     [ Финансы         |    25  | ПСО-14   |Правовых дисц.    | Пераво и орг. соц. обесп.    ]

Теперь с этих таблиц должна сформироваться таблицко, такого рода:

Например мы выбрали кафедру - Информатики и математики:


Шапка                                         [Предмет               |   ПОВТ -2    |    ИС-4    ]
Заполненные данными поля      [ Математика         |    20            |               ]   
                                                    [ ОС                        |                    |    15       ]       

Помогите, очень прошу.. хнык...
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 19-06-2009 05:03 » 

Если делать посредствои конструктора, то "Перекрёстный запрос" Вам в помощь

если же делаете запрос в виде SQL, то TRANSFORM и PIVOT Вам в помощь


Записан

I Have Nine Lives You Have One Only
THINK!
iona
Гость
« Ответ #2 : 19-06-2009 11:43 » 

извините, можно поподробней про SQL. Как составить запрос, что бы поля  в одной таблице, стали шапкой в другой. Хеелп, пожалуйста, сроки поджимают...
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : 19-06-2009 12:27 » 

Код:
TRANSFORM Sum(ВсеКурсы.Часы) AS [Sum-Часы]
SELECT ВсеКурсы.Предмет
FROM (select * from Курс1 union all select * from Курс2). AS ВсеКурсы
WHERE (((ВсеКурсы.Кафедра)=1))
GROUP BY ВсеКурсы.Предмет
PIVOT ВсеКурсы.Группа;

Как это не печально, но такая помощь - "медвежья услуга"
Мне всё равно, а Вам бесполезна, т.к скорее всего его нужно прописать под конкретные данные



ЗЫЖ как составите запрос в виде SQL переключитесь в "конструктор запросов" и посмотрите, как он сощдается графически
Записан

I Have Nine Lives You Have One Only
THINK!
iona
Гость
RE
« Ответ #4 : 19-06-2009 23:01 » 

Спасибо огромное Вам!!! Вы очень помогли!!! Побольше бы людей таких!!!  Класс! Люблю!
На 2х форумах люди только нормально ответили, остальные же (еще около 4-х форумов)  "А почитать слабо" - ну и все в этом духе....  С ума сойти... ну да ладно..

У меня получилось вот что... работает.. выводит.. все замечательно..  (Кстати да, я объединила все 4 курса в одну, поэтому как у вас в коде написано таблыцко теперь ВсеКурсы  Скромно так... , поля остались те же, я их не трогала).... Только теперь надо что бы при выборе в DBLookupComboBoxе выбрав нужную кафедру, он мне показал только те группы, которые относятся к этой выбранной кафедре. Как правильно составить условие Where - а то он у меня вечно синтаксическую ошибку выдает )))) или еще чего  :Улыбаюсь


Код:
TRANSFORM Sum(ВсеКурсы.[Часы]) AS [Sum-Часы]
SELECT ВсеКурсы.[Предмет], Sum(ВсеКурсы.[Часы]) AS [Итоговое значение Часы]
FROM ВсеКурсы
GROUP BY ВсеКурсы.[Предмет]
PIVOT ВсеКурсы.[Группа];
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 20-06-2009 09:36 » 

с акцесом не работаю, поэтому сказать, как надо запрос изменить точно не смогу
но прмерно так

Код:
where Кафедра = DBLookupComboBox.Text

PS: не уверен по поводу синтаксиса, но примерно так
используйте конструктор запросов и проблем не должно быть
Записан

I Have Nine Lives You Have One Only
THINK!
iona
Гость
« Ответ #6 : 21-06-2009 01:32 » 

Мммм.. решила чуть подругому.. а то он ругаться на поля начинает и тд...  Сделала фильтрацию ))))))))))))))))))) 
Код:
if Length(DBLookupComboBox1.Text)>0 then
DataModul.ZaprosPlan.Filtered:=true
else
DataModul.ZaprosPlan.Filtered:=false;
DataModul.ZaprosPlan.Filter:='Специальность ='''+DBEdit1.Text+'''';

Где в едите(скрытый) указывается ид специальности при выборе в дблукомбобоксе.. гы..

Еще вот вопрос возник, как можно закрепить первый столбец в DBGrid  Скромно так...
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #7 : 22-06-2009 04:23 » 

тут уж ни чем помочь не могу.
не знаю и посмотреть негде

возможно скажут на жругих форумах
или воспользуйтесь гуглем
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines