如果满足条件,则创建新表

时间:2020-04-06 22:30:36

标签: sql sql-server tsql sql-insert

编写一个查询,该查询将创建一个名为'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”,则无法遍历记录,则出现以下错误:

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

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