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

admin2018-05-02  29

问题 设在SQL Server 2008某数据库中有商品表和销售表,两个表的定义如下:
    CREATE TABLE商品表(
    商品号 char(10)PRIMARY KEY,
    商品名 varchar(40),
    类别 varchar(20),
    进货单价 int)
    CREATE TABLE 销售表(
    商品号 char(10),
    销售时间 datetime,
    销售数量 int,
    销售单价 int,
    PRIMARY KEY(商品号,销售时间))
    下面是一个用户定义的多语句表值函数,它接受类别作为输入参数,返回该类别下的每种商品在2012年的销售总利润,并将结果按照销售总利润的降序输出。请补全该函数定义代码。
    CREATE FuNCTION f_Profit(@1b char(10))【1】_______@ProfitTable【2】_______(
商品号char(10),
    总利润int)
    AS
    BEGIN
    INSERT INTO @ ProfitTable
    【3】_______
    【4】_______
    END

选项

答案第一空:RETURNS 第二空:table 第三空:SELECT a.商品号,SUM(销售数量*(销售单价-进货单价))AS 总利润 FROM销售表 a JOIN 商品表 b ON a.商品号=b.商品号 WHERE a.商品号 IN(SELECT 商品号 FROM 商品表 WHERE 类别=@ 1b) GROUP BY a.商品号 ORDER BY 总利润 DESC 第四空:RETURN @ ProfitTable

解析 用户定义的多语句表值函数的命令格式为:
    CREATE FUNCTION[schema_name.]function name
    ([{@ parameter_name[AS][type_schema_name.]parameter_data_type
    [=default]}
    [,….n]
    ]
    )
    RETIJRNS @ return_variable TABLE<table_type_deftnition>
    [WITH<function option>[[,]…n]]
    [AS]
    BEGIN
    function_body
    RETURN
    END
    [;]
    <table_type_definitions>::=
    ({<column_definition><column_constraint>
    |<computed_column_definition>}
    [<table_constraint>][,…n]
    )
    题目要求返回指定类别下的每种商品在2012年的销售总利润,并且将结果按照销售总利润的降序输出。采用复合SQL语句的格式,先查出指定类别的所有商品号:SELECT商品号FROM商品表WHERE类别=@ 1b,其中@ 1b为函数的传入参数,然后在销售表中用GROUP BY对商品号进行分组,并采用SUM计算每个分组的总和。
转载请注明原文地址:https://kaotiyun.com/show/uUlZ777K
0

最新回复(0)