例如
表A里面有以下列
姓名 科目 分数  日期
小A  语文  90  2013-1-1
小A  数学  91  2013-1-1
小A  英语  92  2013-1-1
小A  语文  90  2013-2-2
小A  数学  91  2013-2-2
小A  英语  92  2013-2-2
小C  语文  93  2013-1-1
小C  数学  94  2013-1-1
小C  英语  95  2013-1-1
小C  语文  93  2013-2-2
小C  数学  94  2013-2-2
小C  英语  95  2013-2-2如何用sql语句或C#程序   实现如下格式
姓名    日期     语文  数学   英语 
小A  2013-1-1   90   91    92
小A  2013-2-2   90   91    92
小C  2013-1-1   93   94    95
小C  2013-2-2   93   94    95
sqlc#

解决方案 »

  1.   

    with tbA as
    (
         select 'A' xm,'语文' km,90 fs,date'2013-01-01' rq from dual union all
         select 'A' xm,'数学' km,91 fs,date'2013-01-01' rq from dual union all
         select 'A' xm,'英语' km,92 fs,date'2013-01-01' rq from dual union all
         select 'A' xm,'语文' km,90 fs,date'2013-02-01' rq from dual union all
         select 'A' xm,'数学' km,91 fs,date'2013-02-01' rq from dual union all
         select 'A' xm,'英语' km,92 fs,date'2013-02-01' rq from dual
    )
    select xm "姓名",rq "日期",
           sum(decode(km,'语文',fs,0)) "语文",
           sum(decode(km,'数学',fs,0)) "数学",
           sum(decode(km,'英语',fs,0)) "英语"
    from tbA
    group by xm,rq
    order by xm,rq    姓名     日期    语文  数学  英语
    ------------------------------------------------------------
    1 A 2013/1/1 90 91 92
    2 A 2013/2/1 90 91 92
      

  2.   

    典型的行转列,一般都会用case when 或者decode实现,来晚了啊