Sql 如何将行数据显示为列

Sql 如何将行数据显示为列,sql,sql-server,Sql,Sql Server,我想将行值显示为列值。并在表的末尾显示最终的总值 为此,我使用以下数据集 我想在列侧设置此数据 我使用这个SQL查询来实现这一点。但我不知道如何得到小时总数列 select * from (select EMP_NO,SUM(Hours) total from Employee_Attendence group by EMP_NO) pivot (sum(total) for WAGE_Type in ('Absence',

我想将行值显示为列值。并在表的末尾显示最终的总值

为此,我使用以下数据集

我想在列侧设置此数据

我使用这个SQL查询来实现这一点。但我不知道如何得到小时总数列

select *   
from 
    (select EMP_NO,SUM(Hours) total
     from Employee_Attendence
     group by EMP_NO) 
pivot
    (sum(total) 
         for WAGE_Type in ('Absence', 'Normal'))
最终输出应显示如下

Select EMP_NO, Absence, Normal, Total
From 
    (select *
     from 
         (select EMP_NO, sum(Hours) total
          from Employee_Attendence
          group by EMP_NO) 
     pivot
         (sum(total) 
              for WAGE_Type in ('Absence', 'Normal'))
)

一个简单的条件聚合应该可以做到这一点

示例

Select Emp_ID
      ,Absence = sum(case when Wage_Type ='Absence' then Hours else 0 end)
      ,Normal  = sum(case when Wage_Type ='Normal'  then Hours else 0 end)
      ,Total   = sum(Hours)
 From  YourTable
 Group By Emp_ID
结果

Emp_ID  Absence Normal  Total
4000    8       32      40
编辑-如果您想要一个轴心点

Select Emp_ID
      ,Absence
      ,Normal
      ,Total = Absence + Normal
 From YourTable
 Pivot (sum( Hours ) for Wage_Type in ([Absence],[Normal] ) ) pvt

谢谢你的帮助,你知道怎样用同样的方法吗Oracle@Neth很抱歉,几十年没有接触过Oracle。@Neth,您应该在Oracle中使用相同的逻辑,但需要使用列别名。类似的方法应该有效:从表组中按Emp\U ID选择Emp\U ID,sum(工资类型为“缺勤”时的情况,然后小时数为0结束)作为缺勤,sum(工资类型为“正常”时的情况,然后小时数为0结束)作为正常,sum(小时数)作为总计