设在SQL Server 2008某数据库中有商品表和销售表,两个表的定义如下: CREATE TABLE商品表( 商品号 char(10)PRIMARY KEY, 商品名 varchar(40), 类别 varchar(2

admin2019-01-08  22

问题 设在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商品名,
    (
    SELECT【1】
    FROM销售表t1
    WHERE【2】and
    year(销售时间)=year(【3】)
    )AS当年销售总数量
    FROM商品表t2 WHERE【4】

选项

答案第一空:SUM(销售单价*销售数量) 第二空:t1.商品号=t2.商品号 第三空:t1.销售时间 第四空:t2.类别=@lb

解析 (1)整个Select语句的含义是:根据Where子句的条件表达式,从From子句指定的基本表或视图中找出满足条件的元组,再按Select子句中的目标列的表达式,选出元组中的属性值形成结果表。
    (2)该题中(SELECT FROM销售表t1 WHERE and=year(Getdate()))是个嵌套的子查询,别名叫做销售总金额。
    (3)语句的执行过程如下。
    ①先从商品表中按照第二个Where子句形成一个初步查询结果。由于只有商品表中有类别,因此可知第四空填写:t2.类别=@1b(t2是商品表的别名,t1是销售表的别名)。由此可知该步是按给定类别查询。
    ②销售总金额语句就应该在第一部的基础上求某年的总额。因此可以推断第三空是获得销售时间语句。因此第三空应填写:t1.销售时间。由于是在第一步基础上的查询,所以该行应该是连接表查询,第二空应该填写连接的条件,即第二空应填写:t1.商品号=t2.商品号。
    ③第一空应该是求总额的语句。销售总金额=销售单价*销售数量,即第一空应填写:SUM(销售单价*销售数量)。
转载请注明原文地址:https://kaotiyun.com/show/hPlZ777K
0

最新回复(0)