应用题 1.  设在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(@lb char(10))______@ProfitTable______(
    商品号char(10),
    总利润int)
    AS
    BEGIN
    INSERT INTO @ProfitTable
    ______
    ______
    END
【正确答案】第一空:RETURNS
   第二空:table
   第三空:SELECT a.商品号,SUM(销售数量*(销售单价-进货单价))AS总利润FROM销售表a JOIN商品表b ON a.商品号=b.商品号WHERE a.商品号IN(SELECT商品号FROM商品表WHERE类别=@lB) 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]
 ]
 )
 RETURNS@return_variable TABLE
 [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类别=@lb,其中@lb为函数的传入参数,然后在销售表中用GROUP BY对商品号进行分组,并采用SUM计算每个分组的总和。