id        传真编号    传真标题 传真内容 发送时间 发送人 
1 20130917001 aaa1 测试1       2013/9/17          张三
2 20130917002 aaa2 测试2       2013/9/17          李斯
3 20130917003 aaa3 测试3       2013/9/17          王五
4 20130917004 aaa4 测试4       2013/9/17          李斯
5 20130917005 aaa5 测试5       2013/9/17          张三
6 20130917006 aaa6 测试6       2013/9/17          张三
(注:"发送人"列实际为引用用户表的主键user_id,为表达明白直接写用户名)
此表为传真发送记录表,需求:如何通过一条sql统计出每个人发送的传真信息?  
统计结果如下:
用户 传真号
张三 20130917001
20130917005
20130917005

李斯 20130917002
20130917004

王五 20130917003 sql   oracle

解决方案 »

  1.   

    怎么个统计法  这是表示一行 还是三行 就第一行有人名 下面用空代替么?张三 20130917001 20130917005 20130917005or 张三 20130917001
    null    20130917005
    null    20130917005
      

  2.   

    你意思如果一列显示 用WM_CONCAT 函数吗?select WM_CONCAT(传真编号), 用户名
      from table t group by t.用户名;除了这种写法还有别的没?
      

  3.   

    listaag行吗?你这个 WM_CONCAT也可以,分析函数就能搞定。或者按字段都写出来出查询。
      

  4.   

    如下三个函数都可以实现:
    sys_connect_by_path 9i中就可以使用
    wm_concat 10g以上才可以使用
    listagg 11gR2才可以使用
      

  5.   

    支持楼上的正解
    with a as
    (
    select '20130917001' as czbh,'张三' as fsr from dual union all 
    select '20130917002' as czbh,'李斯' as fsr from dual union all 
    select '20130917003' as czbh,'王五' as fsr from dual union all 
    select '20130917004' as czbh,'李斯' as fsr from dual union all
    select '20130917005' as czbh,'张三' as fsr from dual union all  
    select '20130917006' as czbh,'张三' as fsr from dual 
    )
    select wm_concat(czbh),fsr from a group by fsr