热情软件屋

 

怎么用SQL语句直接进行某列的记录旋转为列标识


编号:QA004443
建立日期: 2001年10月9日 最后修改日期:2001年10月9日
所属类别:

xu03:
    操作系统:Win
    编程工具:SQL70 OR SQL 2000
    问题:数据库系统:SQL70 OR SQL 2000
    有如下表结构和记录如下:
    员工编号 工资类别 金额
    --------------- -------------------- --------
    1001 请假 50.00
    1001 加班 20.00
    1001 全勤 100.00
    1002 请假 20.00
    1002 全勤 10.00
    
    我想通过一个Select语句直接生成如下格式的查询结果:
    要求不需要视图或中间表,直接用SQL语句完成,望各位高手指教,我考虑了用 CASE .....WHEN ......END 语句
    但不很成功。
    
    查询结果 1:
    员工编号 请假 加班 全勤 合计
    ----------- ----- ---- ---- ----
    1001 50 20 100 170
    1002 20 10 30
    
    
    查询结果 2:
    员工编号 请假 加班 全勤
    ----------- ----- ---- ----
    1001 50 20 100
    1002 20 10
    当然如果有行合计和列合计最佳啦!备注:其实我想做的是怎么用SQL语句直接进行某列的记录旋转为列标识。

回答:

    hyq的意见:
    我用的是oracle,不过sql语句上与SQL SERVER几乎一样的,稍微改动一下decode()即可。
    注:decode() 是一个oracle函数,类似:[if 条件 then 语句]
    decode(工资类别,'请假',sum(金额)) 等于 if 工资类别='请假' then sum(金额)
    这里用了嵌套子查询:
    select ...
    from ( select ... from ... where ...)
    where ...
    
    语句如下:
    
    select 员工编号,sum(请假) as 请假,sum(加班) as 加班,sum(全勤) as 全勤,sum(请假)+sum(加班)+sum(全勤) as 合计
    from
    (
    select 员工编号,decode(工资类别,'请假',sum(金额)) as 请假,decode(工资类别,'加班',sum(金额)) as 加班,
     decode(工资类别,'全勤',sum(金额)) as 全勤
    from 你的数据表
    where 你想要的条件
    group by 员工编号,工资类别
    )
    group by 员工编号
    
    vvrobin的意见:
    select a.员工编号 as 员工编号,sum(a.金额) as 请假,sum(b.金额) as 加班,sum(c.金额) as 全勤,sum(d.金额) as 合计 from TheTable as a,TheTable as b,TheTable as c,TheTable as d where a.工资类别 = 请假 and b.工资类别 = 加班 and c.工资类别 = 全勤 and a.员工编号=b.员工编号 and b.员工编号=c.员工编号 and c.员工编号=d.员工编号 group by 员工编号 Having 员工编号 like ?@Para order by 员工编号

此问题由hyq等回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio