一道笔试题,不知道怎么用纯sql解决
订单order(id,cust_id,create_date...)
订单分单order_entity(id,order_id,prod_id,money)
客户Cust(id,name)
产品prod(id,name)
报表
-------------------------
产品  | 2006.1.1至2007.1.1
---------------------------
      | 客户1|     300元
产品1 | ------------------
      | 客户2|     200元
-----------------------------
      | 客户1|     300元
产品2 | ------------------
      | 客户2|     200元
-----------------------------查询语句怎么写?

解决方案 »

  1.   

    用SQL完全实现这个一模一样的功能?这哪是在面试哦
      

  2.   

    我讨厌在SQL中进行输出格式控制 :(
    SQL的核心价值不是输出好看的报表,是给报表工具提供数据。
      

  3.   

    非得如此,则用cursor去遍历。
      

  4.   


    这样的面试题目我会做 这样的给他 
    ------------------------- 
     产品        ¦ 客户  ¦  money
     ------------------ ---------- 
     产品1      ¦ 客户1 ¦     300元 
     ------------------ ---------- 
     产品1      ¦ 客户2 ¦     200元 
    ----------------------------- 
     产品2      ¦ 客户1 ¦     300元 
     ------------------ ---------- 
     产品2      ¦ 客户2 ¦     200元 
    -----------------------------
    再说引用上面的话 
      

  5.   

    sql 能输出格式吗?sql 能做报表这样的格式吗?严重怀疑出这个题目的人
      

  6.   

       
        用Cursor试试
      

  7.   

    declare @prod char(50), @cust char(50), @amount money
    declare @p0 char(50) SET @p0=''
    print '-------------------------'
    print '产品   ¦ 2006.1.1至2007.1.1'
    declare cur_order cursor for
    select dp.name, cu.name, amount = sum[money]
    from [order] a
    join [order_entity] b on a.id=b.id
    join [prod] dp on dp.id=prod_id
    join [Cust] dc on dc.id=cust_id
    where create_date >= '2006.1.1' and create_date < '2007.1.1'
    group by dp.name, cu.name
    order by dp.name, cu.name
    open cur_order
    fetch next from cur_order into @prod, @cust, @amount
    while @@fetch_status!=-1 begin
        if @p0!=@prod begin
          print '------------------------------------------------------------------------'
          print @prod+'|'+@cust+'|'+right(space(10)+cast(@amount as varchar(10)),10)+'元'
          set @p0=@prod
        end
        else begin
          print space(50)+'|------------------------------------------------------------'
          print space(50)+'|'+@cust+'|'+right(space(10)+cast(@amount as varchar(10)),10)+'元'
        end
    fetch next from cur_order into @prod, @cust, @amount
    end
    close cur_order
    deallocate cur_order
    print '------------------------------------------------------------------------'
    效果类似于:
    -------------------------
    产品   ¦ 2006.1.1至2007.1.1
    ---------------------------
    产品1  ¦ 客户1 ¦     300元
           ¦------------------
           ¦ 客户2 ¦     200元
    ---------------------------
    产品2  ¦ 客户1 ¦     300元
           ¦------------------
           ¦ 客户2 ¦     200元
    ---------------------------另: 我还是非常讨厌在SQL中进行输出格式控制
      

  8.   


    这样回答不知道合适不:
    SELECT a.NAME,b.NAME,SUM(d.money) AS TotalCharge 
    FROM prod a 
    INNER JOIN Cust b ON a.id = b.id
    INNER JOIN order c ON b.id = c.id
    INNER JOIN order_Entity d ON c.id = d.id
    WHERE c.Create_Date>='2006-1-1' and c.CreateDate<='2007-01-01'
    GROUP BY a.NAME,b.NAME
    ORDER BY a.NAME,b.NAME
    使用报表工具对产品分组,显示上面SQL结果
      

  9.   


    我也觉得这样的答案已经可以了,不过在招聘笔试中考这样的内容我也觉得不太合适,毕竟工作和考试是两码事,工作可没有闭卷要求,结果这次面试7套卷子,我一半没做到就交卷了,个人感觉很不爽。
    呵呵,看来还需要修炼啊。
    另外谢谢tim_spac 写出了详细代码