下午去面试,没做出来几个,还不知道对不对,把题发出来望各位多多指教1:表中包含购买日期以及检测周期(年、月、日、季)。请用SQL实现对客户提醒检测时间。
2:各分局数据需要向总局汇总。请问有哪些方法可以实现。简要说明各自优缺点。
3:库存表中如何实现提取以及统计库存总计(用SQL实现)
4:表A(编号、单位、产品名称)表B(A编号、单位、销售价格、销售时间)。统计出一年中各个月份产品销售的总价(SQL回答)
5:如何实现以下报表
1月 2月 3月 。 合计
   水果 总额
个数
6:已知树中某节点内容及层次,使用SQL遍历所有子节点
7:将3月份工资表全部复制为4月工资表,把月份更改为4月
8:ITEM中ID 1、2、3 内容 铁、铜、铝。使用SQL得出字符串“铁,铜,铝”
很有意思,这家公司出了8道题全部都是要求只用SQL写出来。

解决方案 »

  1.   

    既然都是SQL,去SQL区比较好。有些公司喜欢通过存储过程直接返回报表数据,SQL语句复杂不说,维护还很困难。显然这家公司是用这个方法写程序的。而且这样的面试题还有骗代码的嫌疑,楼主哪怕全做出来,也没通知的。
      

  2.   

    要行列转换,一般用动态sql或者case when 语法
    给你的例子
    --建立测试环境
    --目标
    /*
    日期           合计        大隗门市部        牛庄门市部    
    2005-12-18     37             11                26 
    2005-12-19     33             12                21
    2005-12-20     38             16                22
    */
    Create Table 表(分店名称 varchar(10),日期 varchar(50),数量 varchar(10))
    --插入数据
    insert into 表
    select '大隗门市部','2005-12-18 00:00:00.000','11' union
    select '大隗门市部','2005-12-19 00:00:00.000','12' union
    select '大隗门市部','2005-12-20 00:00:00.000','16' union
    select '牛庄门市部','2005-12-18 00:00:00.000','26' union
    select '牛庄门市部','2005-12-19 00:00:00.000','21' union
    select '牛庄门市部','2005-12-20 00:00:00.000','22'
    --select * from 表
    --测试语句
    select left(日期,10),合计=count(*),sum(case 分店名称 when '大隗门市部' then 1 else 0 end) [大隗门市部],
    sum(case 分店名称 when '牛庄门市部' then 1 else 0 end) [牛庄门市部]from 表
    group by left(日期,10)
     
     
    --删除测试环境
    Drop Table 表
      

  3.   

    根据月份分组也可以 group by left(日期,10)呵呵,又学了一招
      

  4.   

    group by left(日期,10)  怎么理解?left什么意思?10又是啥意思?