编写一个查询,该查询将创建一个名为'RecentReleases'的新表,其中包含CD代码,标题,艺术家和发行日期作为列及其数据(针对2017年发行的CD),否则会打印一条消息,内容为:没有可用的最新版本。
表CD中的数据
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
问题:
如果我从If子句中删除“ TOP 1”,则无法遍历记录,则出现以下错误:
子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
答案 0 :(得分:0)
我在这里看不到循环的意义。我认为您可以只使用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