问答题
设在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)) _________@ProfitTable_________ (商品号char(10),总利润int)ASBEGININSERT INTO @ProfitTable__________________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] ] ) RETURNS@return_variable TABLE<table_type_definition> [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为函数的传入参数,然后在销售表中用GR0UPBY对商品号进行分组,并采用SUM计算每个分组的总和。