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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2010, 14:18   #1
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию sql запрос

Доброго всем времени суток.
Пишу программу в делфи для деканата, в которой будет возможно следить за количеством долгов студентов. Т.к с языком sql я практически не знаком сталкнулся с такой проблемой:
Есть две таблицы Студенты(поля:номер зачетки,ФИО,группа,телефон) и Здача_экзамена(поля:номер зачетки,предмет,отценка) нужно составить запрос в результате которого образуется таблица состоящая из всех полей табл. Студенты и поля Кол-во_задолжностей в котором будет кол-во проваленных данным студентом экзаменнов.
Заранее огомное спасибо всем откликнувшимся
loki22208 вне форума Ответить с цитированием
Старый 09.07.2010, 14:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

что-то вроде:
Код:
select ФИО, count(отценка) as  [Кол-во_задолжностей]
from Студенты, Здача_экзамена
group by ФИО
where отценка<3
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 14:45   #3
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

На данный момент я сделал вот такой запрос

SELECT Студент.ФИО, Студент.Номер_зачетки, [Здача экзамена].Оценка_по_экзамену
FROM Студент INNER JOIN [Здача экзамена] ON Студент.Номер_зачетки = [Здача экзамена].Номер_зачетки
WHERE ((([Здача экзамена].Оценка_по_экзамену)=2));

При попытке переделать вот так
SELECT Студент.ФИО, Студент.Номер_зачетки, count([Здача экзамена].Оценка_по_экзамену) as [Кол-во_задолжностей]
FROM Студент INNER JOIN [Здача экзамена] ON Студент.Номер_зачетки = [Здача экзамена].Номер_зачетки
WHERE ((([Здача экзамена].Оценка_по_экзамену)=2));

выдал ошибку, к томуж мне кажется таким образом мы наладим связь м\у студентом и общим кол-вом задолжностей, а не м\у студентом и кол-вом именно его задолжностей, хотя могу ошибаться
loki22208 вне форума Ответить с цитированием
Старый 10.07.2010, 00:07   #4
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

Плиз, помогите составить запрос, либо подскажите литературу с помощью которой можно быстро разобраться с языком запросов
loki22208 вне форума Ответить с цитированием
Старый 10.07.2010, 01:37   #5
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

Все, с задачей справился вот таким образом:

for i:=1 to dataModule5.studTable.RecordCount do begin
DataModule5.studTable.Edit;
DataModule5.studTable.RecNo:=i;
DataModule5.ADOQuery1.Active:=false ;
DataModule5.ADOQuery1.SQL.Clear;
DataModule5.ADOQuery1.SQL.Add('SELE CT Студент.ФИО, Студент.Номер_зачетки, [Здача экзамена].Оценка_по_экзамену');
DataModule5.ADOQuery1.SQL.Add('FROM Студент INNER JOIN [Здача экзамена] ON Студент.Номер_зачетки=[Здача экзамена].Номер_зачетки');
DataModule5.ADOQuery1.SQL.Add('WHER E (((Студент.Номер_зачетки)="'+DataMo dule5.studTable.Fields.Fields[0].AsString+'")');
DataModule5.ADOQuery1.SQL.Add('AND (([Здача экзамена].Оценка_по_экзамену)=2));');
DataModule5.ADOQuery1.Active:=true;
datamodule5.studTable.FieldValues['Кол-во задолжностей']:=DataModule5.ADOQuery1.RecordCount ;
datamodule5.studTable.Post;

Последний раз редактировалось loki22208; 10.07.2010 в 01:39.
loki22208 вне форума Ответить с цитированием
Старый 10.07.2010, 07:11   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

loki22208
ну, хотя Вы уже решили свою задачу, я всё равно скажу,
что именно у Вас не получалось!
Так, кратенько...
смотрите, Ваш код в Дельфи вернёт что? КОЛИЧЕСТВО записей, которые выбрались с оценкой 2. Так? Так возьмите свой второй вариант запроса и выкиньте из запроса фамилию студента и прочее..
будет так:
Цитата:
SELECT count(*) as CountDvoechnikov
FROM Студент INNER JOIN .....
Кстати, этот запрос имеет один нюансик... Вернётся столько записей, сколько экзаменов было сдано с двойкой.
Попробуйте какому то студенту добавить двойки по нескольким предметам. Сколько двоек добавите, столько записей и будет в выборке...

И последнее, задание стоит как? Найти не общее число проваленных экзаменов, а по "данному студенту" (да и выбрать надо "таблица состоящая из всех полей табл. Студ")
В этом Вам поможет такой запрос:
Код:
SELECT Студент.ФИО, Студент.Номер_зачетки, 
count([Здача экзамена].Оценка_по_экзамену) as [Кол-во_задолжностей]
FROM Студент 
INNER JOIN [Здача экзамена] ON 
Студент.Номер_зачетки = [Здача экзамена].Номер_зачетки
WHERE ((([Здача экзамена].Оценка_по_экзамену)=2))
GROUP BY Студент.ФИО, Студент.Номер_зачетки;
p.s. по русски правильно писать Сдача

Последний раз редактировалось Serge_Bliznykov; 10.07.2010 в 07:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2010, 23:56   #7
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

Serge_Bliznykov спасибо, так и действительно проще и рациональнее.
loki22208 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Запрос в SQL Jasper92 SQL, базы данных 2 12.01.2010 16:58
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос SERG1980 БД в Delphi 6 19.10.2007 23:03
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15