应用题 5.  某书店采用了SQL Server 2008数据库管理系统,该书店有一个需求,需要统计指定年份中每一本书的销售总额,例如:查询2012年所有书的销售总额。
    已知图书结构如下:
    图书表(书号BOOK_ID,书名BOOK_NAME,单价BOOK_PRICE)
    销售表(书号BOOK_ID,销售时间SALE_TIME,销售数量SALE_NUM)。
    假设单价和销售数量均为int型,书号和书名均为varchar(50)类型,销售时间为datetime型。请给出满足如下要求的多语句表值函数,该函数统计指定年份中每本书的销售总额。
    设函数名为:BOOK_PROFIT(@year int),函数的返回结果格式如下:
    书号销售总额
    B001 60000
    A004 50000
    ……
【正确答案】CREATE FUNCTION BOOK_PROFIT(@year int)
   RETURNS@f_BOOK_PROFIT table(
   书号varehar(50),
   销售总额int)
   AS
   BEGIN
   INSERT INTO@f_BOOK_PROFIT
   SELECT a.书号,SUM(a.单价*b.销售数量)
   FROM图书表a JOIN销售表b ON a.书号=b.书号
   WHERE year(b销售时间)=@year
   GROUP BY a.书号
   RETURN
   END
   或者
   CREATE FUNCTION BOOK_PROFIT(@year int)
   RETURNS@f_BOOK_PROFIT table(
   BOOK_ID varehar(50),
   PROFIT int)
   AS
   BEGIN
   INSERT INTO@f_BOOK_PROFIT
   SELECT a.BOOK_ID,SUM(a.BOOK_PRICE*b.SALE_NUM)
   FROM BOOK a JOIN SALE b ON a.BOOK_ID=b.BOOK_ID
   WHERE year(bSALE_TIME)=@year
   GROUP BY a.BOOK_ID
   RETURN
   END
【答案解析】 采用JOIN联合查询,先用WHERE条件查出符合销售时间=@year的记录,再将找出的记录和图书表合并,并采用单价*销售数量计算出联合查询的表数据,最后根据GROUP BY统计每种书的销售价格总和。