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

工资查询SQL求助
xh gs sl ff1 ff1je ff2 ff2je id 年度 月份
张1 100 300 AA 1000 BB 500 1 2012 1
张2 200 400 AA 1000 BB 500 2 2012 1
张3 200 500 0 0 3 2012 1
张4 200 600 AA 1000 0 4 2012 1
张5 200 700 AA 1000 0 5 2012 1
张6 200 800 AA 1000 0 6 2012 1
张7 200 900 AA 1000 BB 100 7 2012 1
张8 200 1000 AA 1000 0 8 2012 1
张9 200 1100 AA 1000 0 9 2012 1
张10 200 1200 AA 1000 0 10 2012 1
张11 200 1300 0 100 11 2012 1
张1 200 1400 0 CC 100 12 2012 2
张2 200 1500 0 CC 0 13 2012 2
张3 200 1600 0 0 14 2012 2
张4 200 1700 0 DD 0 15 2012 2
张5 200 1800 0 DD 0 16 2012 2


生成表1怎么实现
编号 年度 月份 ff
20120101 2012 1 AA
20120102 2012 1 BB
20120201 2012 2 CC
20120202 2012 2 DD

(编号列说明:年+月+编号)

生成表2怎么实现
xh 1月份 2月份 3月份 4月份 5月份 6月份 7月份 8月份 9月份
1 300 1600
2 600 1700
3 700 1800
4 800 1900

  1月(gs+sl )的和 2月(gs+sl )的和




------解决方案--------------------
SQL code

--> 测试数据:[T1]
if object_id('[T1]') is not null drop table [T1]
create table [T1](
[xh] varchar(4),
[gs] int,
[sl] int,
[ff1] varchar(2),
[ff1je] int,
[ff2] varchar(2),
[ff2je] int,
[id] int,
[年度] int,
[月份] int
)
insert [T1]
select '张1',100,300,'AA',1000,'BB',500,1,2012,1 union all
select '张2',200,400,'AA',1000,'BB',500,2,2012,1 union all
select '张3',200,500,null,0,null,0,3,2012,1 union all
select '张4',200,600,'AA',1000,null,0,4,2012,1 union all
select '张5',200,700,'AA',1000,null,0,5,2012,1 union all
select '张6',200,800,'AA',1000,null,0,6,2012,1 union all
select '张7',200,900,'AA',1000,'BB',100,7,2012,1 union all
select '张8',200,1000,'AA',1000,null,0,8,2012,1 union all
select '张9',200,1100,'AA',1000,null,0,9,2012,1 union all
select '张10',200,1200,'AA',1000,null,0,10,2012,1 union all
select '张11',200,1300,null,0,null,100,11,2012,1 union all
select '张1',200,1400,null,0,'CC',100,12,2012,2 union all
select '张2',200,1500,null,0,'CC',0,13,2012,2 union all
select '张3',200,1600,null,0,null,0,14,2012,2 union all
select '张4',200,1700,null,0,'DD',0,15,2012,2 union all
select '张5',200,1800,null,0,'DD',0,16,2012,2
select * from [T1]
--问题1:
select LTRIM(年度)+right('00'+LTRIM(月份),2)+right('00'+LTRIM(ID),2) as 编号 
,年度,月份,ff from(
select ROW_NUMBER()over(partition by 月份 order by ff) as ID,* from(
select 年度,月份,ff1 as ff from [T1] union
select 年度,月份,ff2 as ff from [T1]
)a where ff is not null)b
--问题2:
with t
as(
select [xh],ltrim([月份])+'月份' as 月份,sum([sl]+[gs]) as total
from [T1] where RIGHT(xh,LEN(XH)-1) in('1','2','3','4') group by [xh],[月份]
)
select *
from t 
pivot (sum([total]) for [月份] in([1月份],[2月份],[3月份],[4月份],[5月份],
[6月份],[7月份],[8月份],[9月份]))b

/*
xh    1月份    2月份    3月份    4月份    5月份    6月份    7月份    8月份    9月份
张1    400    1600    NULL    NULL    NULL    NULL    NULL    NULL    NULL
张2    600    1700    NULL    NULL    NULL    NULL    NULL    NULL    NULL
张3    700    1800    NULL    NULL    NULL    NULL    NULL    NULL    NULL
张4    800    1900    NULL    NULL    NULL    NULL    NULL    NULL    NULL
*/
我的异常网推荐解决方案:软件开发者薪资,http://www.aiyiweb.com/other/1391128.html