读书人

工资查询SQL有关问题

发布时间: 2013-09-11 16:59:22 作者: rapoo

工资查询SQL问题
姓名 工资奖金id年度 月份
张1100300120121
张2200400220121
张3200500320121
张4200600420121
张120014001220122
张220015001320122
张320016001420122
张420017001520122

生成表2怎么实现
xh1月 2月 3月 4月5月 6月 7月 8月 9月 10月 11月 12月总计 一季度 二季度 三季度四季度
张1300 16001900 1900
张2600 17002300 2300
张3700 18002500 2500
张4800 19002700 2700


[解决办法]

SQL code
if object_id('[TB]') is not null drop table [TB]gocreate table [TB] (姓名 nvarchar(4),工资 int,奖金 int,id int,年度 int,月份 int)insert into [TB]select '张1',100,300,1,2012,1 union allselect '张2',200,400,2,2012,1 union allselect '张3',200,500,3,2012,1 union allselect '张4',200,600,4,2012,1 union allselect '张1',200,1400,12,2012,2 union allselect '张2',200,1500,13,2012,2 union allselect '张3',200,1600,14,2012,2 union allselect '张4',200,1700,15,2012,2select * from [TB]select 姓名 as 姓名 ,  max(case 月份 when 1 then 工资+奖金 else 0 end) '1月',  max(case 月份 when 2 then 工资+奖金 else 0 end) '2月',  max(case 月份 when 3 then 工资+奖金 else 0 end) '3月',  max(case 月份 when 4 then 工资+奖金 else 0 end) '4月',  max(case 月份 when 5 then 工资+奖金 else 0 end) '5月',  max(case 月份 when 6 then 工资+奖金 else 0 end) '6月',  max(case 月份 when 7 then 工资+奖金 else 0 end) '7月',  max(case 月份 when 8 then 工资+奖金 else 0 end) '8月',  max(case 月份 when 9 then 工资+奖金 else 0 end) '9月',  max(case 月份 when 10 then 工资+奖金 else 0 end) '10月',  max(case 月份 when 11 then 工资+奖金 else 0 end) '11月',  max(case 月份 when 12 then 工资+奖金 else 0 end) '12月',SUM(工资+奖金) AS 'SUM',SUM(CASE WHEN 月份 between 1 and 3 THEN 工资+奖金 ELSE 0 END) '1季度',SUM(CASE WHEN 月份 BETWEEN 4 AND 6 THEN 工资+奖金 ELSE 0 END) '2季度',SUM(CASE WHEN 月份 BETWEEN 7 AND 9 THEN 工资+奖金 ELSE 0 END) '3季度',SUM(CASE WHEN 月份 BETWEEN 10 AND 12 THEN 工资+奖金 ELSE 0 END) '4季度'from tbgroup by 姓名/*姓名   1月          2月          3月          4月          5月          6月          7月          8月          9月          10月         11月         12月         SUM         1季度         2季度         3季度         4季度---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------张1   400         1600        0           0           0           0           0           0           0           0           0           0           2000        2000        0           0           0张2   600         1700        0           0           0           0           0           0           0           0           0           0           2300        2300        0           0           0张3   700         1800        0           0           0           0           0           0           0           0           0           0           2500        2500        0           0           0张4   800         1900        0           0           0           0           0           0           0           0           0           0           2700        2700        0           0           0(4 行受影响)*/
[解决办法]
探讨
非常感谢 OrchidCat 您的帮助
1、想再问一个问题 就是把上面查询的结果保存到一个表中.
2、我在网页ASP中要用到这个表 是直接生成另个表 还是有什么办法让SQL自动生成

[解决办法]
declare @sql varchar(8000)
set @sql = 'select [name]'
select @sql = @sql + ' , max(case [月份] when ''' + [月份] + ''' then score else 0 end) [' + [月份] + ']'
from (select distinct [月份] from t_XXX) as a
set @sql = @sql +SUM(工资+奖金) AS 'SUM',
SUM(CASE WHEN 月份 between 1 and 3 THEN 工资+奖金 ELSE 0 END) '1季度',
SUM(CASE WHEN 月份 BETWEEN 4 AND 6 THEN 工资+奖金 ELSE 0 END) '2季度',
SUM(CASE WHEN 月份 BETWEEN 7 AND 9 THEN 工资+奖金 ELSE 0 END) '3季度',
SUM(CASE WHEN 月份 BETWEEN 10 AND 12 THEN 工资+奖金 ELSE 0 END) '4季度'


+ ' from t_XXX group by [name]'
exec(@sql)
我的异常网推荐解决方案:软件开发者薪资,http://www.myexception.cn/other/1391128.html

读书人网 >SQL Server

热点推荐