问答题
设在SQL Server 2008某数据库中有商品表和销售表,两个表的定义如下:
CREATE TABLE商品表(
商品号char(10) PRIMARY KEY,
商品名varchar(40),
类别varchar(20),
进货单价int)
CREATE TABLE销售表(
商品号char(10) REFERENCES商品表(商品号),
销售时间datetime,
销售数量int,
销售单价int,
PRIMARY KEY(商品号,销售时间))
现要创建一个存储过程:查询指定类别的每种商品去年的累计销售总数量。请补全下列代码。
CREATE PROC p_TotalSales
@lb varchar(20)
AS
SELECT t1.商品号,商品名,______ AS销售总数量
FROM商品表t1.JOIN销售表t2
ON t1.商品号=______
WHERE year(销售时间)=year(______(year,-1,getdate()))
and类别=@lb
______ t1.商品号,商品名
【正确答案】
【答案解析】第一空:SUM(销售数量)
第二空:t2.商品号
第三空:DATEADD
第四空:Group by
[解析] 整个SELECT语句的含义是:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列的表达式,选出元组中的属性值形成结果表。
题目中要求求商品的销售总量,又根据“AS销售总数量”语句知,第1空应使用SUM()函数,即SUM(销售数量)。
从JOIN……ON语句知道,该空是两表相连接语句,连接的属性列为各表的主码,故第2空应填写t2.商品号。
DATEADD()函数在日期中添加或减去指定的时间间隔,基本语法DATEADD(datepart,number,date),date参数是合法的日期表达式;number是希望添加的间隔数,对于未来的时间,此数是正数,对于过去的时间,此数是负数。本题中查询的是去年的累计销售总数量,故第3空填写DATEADD。
题目查询指定类别的商品,因此第4空是按商品号、商品名分组,故填写Group by。