Noob就此。所以我会切入到这一点。这是一个课堂作业,我的教授自周四以来没有回复过电子邮件。我想解决的问题是 -
“编写一个将从每张专辑的制作日期减去一年的查询,并将其标记为RecordDate,并在表格中显示每个条目的专辑标题,制作日期和录制日期。按专辑标题排序结果。“
这个表应该看起来像
这是我使用的查询(在课程中给出我知道重复插入但他想要的东西)......
CREATE TABLE ALBUM(
ALBUM_ID char(4) UNIQUE NOT NULL,
ALBUM_TITLE varchar(255),
ALBUM_YEAR year,
ALBUM_PRODUCER varchar(255),
Primary Key(ALBUM_ID)
);
INSERT INTO ALBUM (ALBUM_ID, ALBUM_TITLE, ALBUM_YEAR, ALBUM_PRODUCER)
VALUES ('A001', 'Awake', '1994', 'East West Record');
INSERT INTO ALBUM (ALBUM_ID, ALBUM_TITLE, ALBUM_YEAR, ALBUM_PRODUCER)
VALUES ('A002', 'Moving Pictures', '1981', 'Anthem');
INSERT INTO ALBUM (ALBUM_ID, ALBUM_TITLE, ALBUM_YEAR, ALBUM_PRODUCER)
VALUES ('A003', 'Damage', '2013', 'RCA REcords');
INSERT INTO ALBUM (ALBUM_ID, ALBUM_TITLE, ALBUM_YEAR, ALBUM_PRODUCER)
VALUES ('A004', 'Continuum', '2006', 'Columbia Records');
以下是我用来开始回答问题的内容
ALTER TABLE ALBUM ADD RECORD_DATE INT;
UPDATE ALBUM SET RECORD_DATE=(ALBUM_YEAR-1);
这确实是一个新的列,并给出了我想要的结果到目前为止(还没有得到问题的后面部分)。但这是两个不同的问题......
那么,根据SQL专家的建议,要实现他想要的东西,我必须编写多个查询,还是可以在一个查询中完成?我的数据类型也可以吗?
不,我不是要求SQL执行此操作。这不是“请为我做我的家庭作业”。对不起,但它必须全部都是上限锁,因为他想要那样。
答案 0 :(得分:2)
安德鲁导师没有要求你添加新专栏或任何内容,他要求你以特定方式提供数据。
我们使用一些名为Database Normalization rules
的特定规则在SQL Server中存储数据。
但是为了以任何特定形式显示数据,我们编写了SELECT
个查询,这些查询从表中选择数据,我们使用各种函数和方法在运行时操作数据并以所需结构显示数据/格式/方式。
同样在这种情况下,对于您的要求,您不需要添加另一列只是为了按照要求执行您的导师,它实际上违反了规范化规则。您只需要一个简单的SELECT
查询,它将以所需的格式/方式显示数据。
选择查询将简单到......
SELECT [ALBUM_TITLE] AS [Album Title]
,[ALBUM_YEAR] AS [Production Date]
,[ALBUM_YEAR] - 1 AS [Record Date]
FROM ALBUM
ORDER BY [ALBUM_TITLE]
答案 1 :(得分:1)
您根本不需要更改表格。您只是想要选择其他列。我不会为你写完整的查询,但我会告诉你我的意思:
SELECT ALBUM_TITLE, ALBUM_YEAR, ALBUM_YEAR - 1 AS RECORD_DATE
-- rest of the query here --