Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 16.03.2015
Сообщений: 20

Вывести семестры и их специальности в которых соблюдается условие - 5 зачетов и 3 экзамена

20.03.2018, 20:05. Показов 1374. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Имеется БД с такой таблицей:
SQL
1
2
3
4
5
6
7
CREATE TABLE Discipline(
ID_dis          INT IDENTITY(1,1)   NOT NULL, --ID_Дисциплины
Name            VARCHAR(50)         NOT NULL, --название
Major           INT                 NOT NULL, --специальность
Semester        INT                 NOT NULL, --семестр
SIZE            INT                 NOT NULL, --объем (в часах)
Report          VARCHAR(30)         NOT NULL, --отчетность (экзамен/зачет/курсовая/контрольная)
и с такими заполненными данными
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
GO
INSERT INTO Discipline(Name,Major,Semester,SIZE,Report) VALUES --заполнение
('Матан',1,1,120,'Зачет'),
('Матлог',1,1,140,'Зачет'),
('ОП',1,1,115,'Зачет'),
('Философия',1,1,90,'Зачет'),
('Экология',1,1,90,'Зачет'),
('Матан',1,1,120,'Экзамен'),
('Матлог',1,1,140,'Экзамен'),
('История',1,1,80,'Экзамен')--1 семестр, 1 специальность
GO
INSERT INTO Discipline(Name,Major,Semester,SIZE,Report) VALUES --заполнение
('Матан',1,2,120,'Зачет'),
('Дискрет',1,2,130,'Зачет'),
('Речь',1,2,90,'Зачет'),
('Англ',1,2,75,'Зачет'),
('Экология',1,2,80,'Зачет'),
('Матан',1,2,120,'Экзамен'),
('Дискрет',1,2,130,'Экзамен'),
('ОП',1,2,115,'Экзамен')--2 семестр, 1 специальность
GO
 
INSERT INTO Discipline(Name,Major,Semester,SIZE,Report) VALUES --заполнение
('Физика',2,1,130,'Зачет'),
('ИТ',2,1,100,'Зачет'),
('Ф-ра',2,1,110,'Зачет'),
('Англ',2,1,75,'Зачет'),
('Информ',2,1,120,'Зачет'),
('Физика',2,1,130,'Экзамен'),
('ИТ',2,1,100,'Экзамен'),
('БД',2,1,90,'Экзамен')--1 семестр, 2 специальность
GO
INSERT INTO Discipline(Name,Major,Semester,SIZE,Report) VALUES --заполнение
('Психол',2,2,80,'Зачет'),
('Биология',2,2,90,'Зачет'),
('Ф-ра',2,2,110,'Зачет'),
('Англ',2,2,75,'Зачет'),
('География',2,2,120,'Зачет'),
('Психол',2,2,80,'Экзамен'),
('Биология',2,2,90,'Экзамен'),
('Физика',2,2,130,'Экзамен')--2 семестр, 2 специальность
GO
 
INSERT INTO Discipline(Name,Major,Semester,SIZE,Report) VALUES --заполнение
('ОП',3,1,115,'Зачет'),
('Матан',3,1,120,'Зачет'),
('Ф-ра',3,1,110,'Зачет'),
('Англ',3,1,75,'Зачет'),
('ТИПиС',3,1,110,'Зачет'),
('ОП',3,1,115,'Экзамен'),
('Матан',3,1,120,'Экзамен'),
('ИБ',3,1,120,'Экзамен')--1 семестр, 3 специальность
GO
INSERT INTO Discipline(Name,Major,Semester,SIZE,Report) VALUES --заполнение
('АлГем',3,2,120,'Зачет'),
('Матан',3,2,120,'Зачет'),
('Ф-ра',3,2,110,'Зачет'),
('Англ',3,2,75,'Зачет'),
('БД',3,2,90,'Зачет'),
('АлГем',3,2,120,'Экзамен'),
('Матан',3,2,120,'Экзамен'),
('Экономика',3,2,80,'Экзамен')--2 семестр, 3 специальность
GO
По заданию хочу реализовать запрос, по которому можно вывести семестры и их специальности в которых соблюдается условие - 5 зачетов и 3 экзамена.
Пробовал разные вариации, но всё тщетно.
Может кто подкинуть идею через что можно такое реализовать?
Благодарю за помощь заранее.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2018, 20:05
Ответы с готовыми решениями:

Вывести строки из структуры, в которых одновременно соблюдается равенство
Здравствуйте , следующий вопрос : как вывести строки из структуры , в которых одновременно соблюдается равенство rang==rangs ;...

Не соблюдается условие в Word VBA
Всем здравствуйте. У меня такая проблема, переменная kolP1 подсчитывает параграфы в документе, nP1-ввод номера параграфа, отсюда казалось...

DataGridView1 не соблюдается условие заполения
Это окно редактирования документа в новой форме. Когда нажимаешь на button1, должна заполнится dataGridView1 согласно тому номеру который...

6
5962 / 4538 / 1094
Регистрация: 29.08.2013
Сообщений: 28,150
Записей в блоге: 3
21.03.2018, 11:14
Цитата Сообщение от AndreiCraby Посмотреть сообщение
Имеется БД с такой таблицей:
почему таблица с такими полями?
Цитата Сообщение от AndreiCraby Посмотреть сообщение
ID_dis* * * * * INT IDENTITY(1,1) * NOT NULL, --ID_Дисциплины
как ID дисциплины может быть счетчиком?
счетчик это уникальная строка, а ID дисциплины должно браться из справочника

Цитата Сообщение от AndreiCraby Посмотреть сообщение
Name* * * * * * VARCHAR(50) * * * * NOT NULL, --название
название чего? дисциплины? так оно из справочника подтягивается

Цитата Сообщение от AndreiCraby Посмотреть сообщение
Major * * * * * INT * * * * * * * * NOT NULL, --специальность
аналогично, должен быть справочник и в таблице должно быть ID специальности

Цитата Сообщение от AndreiCraby Посмотреть сообщение
Report* * * * * VARCHAR(30) * * * * NOT NULL, --отчетность (экзамен/зачет/курсовая/контрольная)
СПРАВОЧНИК Карл, тут тоже справочник

Цитата Сообщение от AndreiCraby Посмотреть сообщение
Может кто подкинуть идею через что можно такое реализовать?
group by и HAVING
0
1 / 1 / 0
Регистрация: 16.03.2015
Сообщений: 20
21.03.2018, 15:56  [ТС]
По сути именно эта таблица и есть справочник. Для всей БД.
Почему такие столбцы? потому что ТЗ так написано.
Вся бд выглядит так:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
CREATE DATABASE DEKAN
GO 
USE DEKAN
GO
CREATE TABLE Major(
ID_major        INT IDENTITY(1,1)   NOT NULL, --ID специальности
Cipher          VARCHAR(10)         NOT NULL, --шифр 
Name            VARCHAR(50)         NOT NULL, --наименование 
Form            VARCHAR(30)         NOT NULL, --форма обучения
Degree          VARCHAR(30)         NOT NULL, --уровень (бакалавриат/специалитет/магистратура/аспирантура) 
Duration        INT                 NOT NULL, --продолжительность обучения (в семестрах) 
Specification   VARCHAR(50)         NOT NULL, --описание
CONSTRAINT PrimaryKey_ID_major_Major PRIMARY KEY CLUSTERED(ID_major));
GO 
CREATE TABLE Groups(
ID_group        INT IDENTITY(1,1)   NOT NULL, --ID группы
Name            VARCHAR(50)         NOT NULL, --название
Major           VARCHAR(50)         NOT NULL, --специальность
Starosta        INT                 NOT NULL, --староста (номер зачетной книжки) 
Curator         INT                 NOT NULL, --куратор (табельный номер)
CONSTRAINT PrimaryKey_ID_group_Groups PRIMARY KEY CLUSTERED(ID_group));
GO 
CREATE TABLE Students(
Number_st       INT                 NOT NULL, --номер зачетной книжки студента
First_name      VARCHAR(50)         NOT NULL, --фамилия
Second_name     VARCHAR(50)         NOT NULL, --имя
Middle_name     VARCHAR(50)         NOT NULL, --отчество
ID_group        INT                 NOT NULL, --ID группы
YearAp          INT                 NOT NULL, --год поступления
CONSTRAINT PrimaryKey_Number_Students PRIMARY KEY CLUSTERED(Number_st));
GO
CREATE TABLE Teachers(
Number_Per      INT IDENTITY(1,1)   NOT NULL, --табельный номер преподавателя
First_name      VARCHAR(50)         NOT NULL, --фамилия
Second_name     VARCHAR(50)         NOT NULL, --имя
Middle_name     VARCHAR(50)         NOT NULL, --отчество
Degree          VARCHAR(30)         NOT NULL, --ученая степень 
Ranks           VARCHAR(30)         NOT NULL, --ученое звание
Pulpit          VARCHAR(30)         NOT NULL, --кафедра
CONSTRAINT PrimaryKey_Number_Per_Teachers PRIMARY KEY CLUSTERED(Number_Per));
GO
CREATE TABLE Discipline(
ID_dis          INT IDENTITY(1,1)   NOT NULL, --ID_Дисциплины
Name            VARCHAR(50)         NOT NULL, --название
Major           INT                 NOT NULL, --специальность
Semester        INT                 NOT NULL, --семестр
SIZE            INT                 NOT NULL, --объем (в часах)
Report          VARCHAR(30)         NOT NULL, --отчетность (экзамен/зачет/курсовая/контрольная)
CONSTRAINT PrimaryKey_ID_dis_Discipline PRIMARY KEY CLUSTERED(ID_dis));
GO
CREATE TABLE Study(
Number_st       INT                 NOT NULL, --номер зачетной книжки студента   
ID_dis          INT                 NOT NULL, --ID_Дисциплины 
Date_del        DATE                NOT NULL, --дата сдачи
Mark            INT                 NOT NULL, --оценка
);
GO
CREATE TABLE Tuition(
ID_dis          INT                 NOT NULL, --ID_Дисциплины 
Number_Per      INT                 NOT NULL, --табельный номер
);
0
5962 / 4538 / 1094
Регистрация: 29.08.2013
Сообщений: 28,150
Записей в блоге: 3
21.03.2018, 16:20
попробуй так, не тестировал)

SQL
1
2
3
4
5
6
7
SELECT Major, Semester, SUM(зачет), SUM(экзамен)
FROM (
SELECT Major, Semester, CASE THEN report='зачет' THEN 1 END AS Зачет,  CASE THEN report='экзамен' THEN 1 END AS экзамен
FROM Discipline
)
GROUP BY Major, Semester
HAVING SUM(зачет)=5 AND SUM(экзамен)=3
1
1 / 1 / 0
Регистрация: 16.03.2015
Сообщений: 20
21.03.2018, 17:48  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
попробуй так, не тестировал)
Попробовал, сразу выбило ошибку с
SQL
1
CASE THEN report='зачет'
поменял на CASE WHEN - все описания столбцов подсветились красным(пишет что недопустимые имена таблиц) и неправильный синтаксис возле груп бай.
Выглядит так.

Пробовал фиксить - по итогу максимальное вышло это [максимальное в плане минимального количества подсвеченных ошибок =)]


Не совсем понимаю почему после исправления - он перестает видеть таблицы.
0
5962 / 4538 / 1094
Регистрация: 29.08.2013
Сообщений: 28,150
Записей в блоге: 3
22.03.2018, 00:12
Лучший ответ Сообщение было отмечено AndreiCraby как решение

Решение

потому что нет алиаса временной таблицы

нужно так
SQL
1
2
3
4
5
6
7
SELECT Major, Semester, SUM(зачет), SUM(экзамен)
FROM (
SELECT Major, Semester, CASE WHEN report='зачет' THEN 1 END AS Зачет,  CASE WHEN report='экзамен' THEN 1 END AS экзамен
FROM Discipline
) t
GROUP BY Major, Semester
HAVING SUM(зачет)=5 AND SUM(экзамен)=
3
1
1 / 1 / 0
Регистрация: 16.03.2015
Сообщений: 20
22.03.2018, 00:47  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
потому что нет алиаса временной таблицы
Спасибо большое!) ответ был так близок и так далек одновременно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2018, 00:47
Помогаю со студенческими работами здесь

Условие не соблюдается. выводит if в любом случае
вот код. что я делаю не так? на условие не обращайте внимания, я только учусь. суть в том, что он в любом случае пишет "вы ввели...

Вывести элементы массивa, для которых выполняется заданное условие
Дан массив из 10 целых чисел di. Вывести на экран в строку только те элементы, для которых выполняется условие: di>1

Вывести номера тех пар массива, для которых выполняется условие
Всем доброе время суток! Не могу решить задачу по одномерным массивам.:wall: Задача : Даны два массива Х(10) и Y(10). Вывести...

Массив: вывести индексы тех элементов, для которых исполняется условие C[i][j]= C[j][i]
Есть двухмерный масив (матрица) розмером nxn вывести индексы тех елементов для которых исполняется условие C= C. Помогите плиз, немогу...

Вывести в обратном порядке все числа для которых выполняется условие
Вывести в обратном порядке все числа для которых выполняется условие : оба его " соседи " отрицательные , а именно число...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru