Создать новую таблицу, если выполнены условия - PullRequest
0 голосов
/ 07 апреля 2020

Напишите запрос, который создаст новую таблицу с именем «RecentReleases» с кодом CD, названием, исполнителем и датой выпуска в виде столбцов и его данных для компакт-дисков, выпущенных в 2017 году, в противном случае будет напечатано сообщение со следующим текстом: ' Нет доступных последних выпусков '.

Данные на компакт-дисках таблиц

 INSERT INTO CDs VALUES
 ('CD001', 'Awesome 80s Collection', 'Various', 24, '1991/01/01', 'R99'),
 ('CD002', 'Anti', 'Rihanna', 13, '2016/02/01', 'R183'),
 ('CD003', 'Now 75', 'Various', 22, '2017/03/01', 'R140'),
 ('CD004', 'The Afterlove', 'James Blunt', 10, '2017/04/01', 'R140'),
 ('CD005', 'Oh My My', 'One Republic', 16, '2016/10/01', 'R151');

Что я пробовал:

DECLARE @i INT
SET @i = 1
WHILE @i <= (SELECT COUNT(*) FROM CDs)
BEGIN
  IF  (SELECT TOP 1 YEAR(RELEASE_DATE) FROM CDs) = 2017
    BEGIN
       SELECT CD_CODE, TITLE, ARTIST, RELEASE_DATE INTO RecentReleases
       FROM CDs
       SET @i += 1
    END
  ELSE
    BEGIN
       PRINT 'No recent releases available'
       SET @i += 1
    END
 END

Вывод:

No recent releases available
No recent releases available
No recent releases available
No recent releases available
No recent releases available
Completion time: 2020-04-07T00:19:16.0325100+02:00

Проблемы:

Невозможно перебрать записи, если я удалю «TOP 1» из моего предложения If, тогда я получу следующую ошибку:

Подзапрос вернул более 1 значения , Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

1 Ответ

0 голосов
/ 07 апреля 2020

Я не вижу смысла для всех oop здесь. Я думаю, что вы можете просто использовать EXISTS, чтобы проверить, существует ли любая запись на 2017 год: если проверка прошла успешно, вы можете выполнить запрос SELECT ... INTO, иначе распечатать сообщение.

BEGIN
    IF  EXISTS(SELECT 1 FROM CDs WHERE RELEASE_DATE >= '2017-01-01' AND RELEASE_DATE < '2018-01-01')
    BEGIN
        SELECT CD_CODE, TITLE, ARTIST, RELEASE_DATE 
        INTO RecentReleases
        FROM CDs
        WHERE RELEASE_DATE >= '2017-01-01' AND RELEASE_DATE < '2018-01-01';
    END
    ELSE
    BEGIN
       PRINT 'No recent releases available';
    END
END
...