日期:2014-05-18  浏览次数:20538 次

!!!!!!求SQL语句,行转列问题.....结贴超快,先到先得,顶者有分!
!!!!!!求SQL语句,结贴超快,先到先得,顶者有分!


表TabA
ID EmpID RegDate ItemName RValue
------------------------
745 0605029 2007-03-01 基本工资 .000000
746 0605029 2007-03-01 计时工资 .000000
747 0605029 2007-03-01 计件工资 .000000
748 0605029 2007-03-01 提成工资 .000000
754 0605029 2007-03-01 通宵津贴 .000000
755 0605029 2007-03-01 住宿津贴 .000000
756 0605029 2007-03-01   交通津贴 .000000
757 0605029 2007-03-01 水电津贴 .000000
758 0605029 2007-03-01 社保津贴 .000000
759 0605029 2007-03-01   医保津贴 .000000
760 0605029 2007-03-01 补上期 .000000
761 0605029 2007-03-01 扣上期 .000000
762 0605029 2007-03-01 扣迟到 .000000
763 0605029 2007-03-01 扣早退 .000000
764 0605029 2007-03-01 扣旷工 .000000
765 0605029 2007-03-01   扣住宿费 .000000
766 0605029 2007-03-01 扣水电费 .000000
767 0605029 2007-03-01   扣社保费 .000000
768 0605029 2007-03-01   扣医保费 .000000
769 0605029 2007-03-01 扣所得税 .000000
770 0605029 2007-03-01 应发 .000000
771 0605029 2007-03-01 实发 .000000

772 0605030 2007-03-01 基本工资 .000000
773 0605030 2007-03-01 计时工资 .000000
774 0605030 2007-03-01 计件工资 .000000
775 0605030 2007-03-01 提成工资 .000000
776 0605030 2007-03-01 通宵津贴 .000000
777 0605030 2007-03-01 住宿津贴 .000000
778 0605030 2007-03-01   交通津贴 .000000
779 0605030 2007-03-01 水电津贴 .000000
780 0605030 2007-03-01 社保津贴 .000000
781 0605030 2007-03-01   医保津贴 .000000
782 0605030 2007-03-01 补上期 .000000
783 0605030 2007-03-01 扣上期 .000000
784 0605030 2007-03-01 扣迟到 .000000
785 0605030 2007-03-01 扣早退 .000000
786 0605030 2007-03-01 扣旷工 .000000
787 0605030 2007-03-01   扣住宿费 .000000
788 0605030 2007-03-01 扣水电费 .000000
789 0605030 2007-03-01   扣社保费 .000000
790 0605030 2007-03-01   扣医保费 .000000
791 0605030 2007-03-01 扣所得税 .000000
792 0605030 2007-03-01 应发 .000000
793 0605030 2007-03-01 实发 .000000

需要用SQL语句转换为下表格式
(   假设最列宽为5列,员工编号和日期在后面行不需要重复)

EmpID RegDate                           i1       i2     i3
----------------------------
0605029 2007-03-01 基本工资 计时工资 计件工资
.000000 .000000 .000000
提成工资 通宵津贴 住宿津贴
.000000 .000000 .000000
.......直到ItemName排列完成

0605030 2007-03-01 基本工资 计时工资 计件工资
.000000 .000000 .000000
提成工资 通宵津贴 住宿津贴
.000000 .000000 .000000
.......直到ItemName排列完成




------解决方案--------------------
declare @sql varchar(8000)
set @sql = 'select EmpID,RegDate '
select @sql = @sql + ' , sum(case ItemName when ' ' ' + ItemName + ' ' ' then RValue else 0 end) [ ' + ItemName + '] '
from (select distinct RValue from tb) as a
set @sql = @sql + ' from tb group by EmpID,RegDate '
exec(@sql)
------解决方案--------------------
我慢,我先顶还不行?????????
------解决方案--------------------
jf
------解决方案--------------------
sql service不支持交叉查询,在程序中很方便的