首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎样写工资核算表的SQL?该怎么解决

2013-09-11 
怎样写工资核算表的SQL?createtable工资表(客户姓名varchar(50),车型varchar(50),合同编号varchar(50),修

怎样写工资核算表的SQL?
create   table   工资表
(
客户姓名   varchar(50),
车型   varchar(50),
合同编号     varchar(50),
修理内容     varchar(100),
修理费用   decimal(13,2),
派工日期     datetime
)
insert   into   工资表   select   'aaa ', 'a车型 ', 'htzz-1 ', '切割车厢 ',2000, '2007-7-1 '
insert   into   工资表   select   'aaa ', 'a车型 ', 'htzz-1 ', '焊合车厢 ',1500, '2007-7-1 '
insert   into   工资表   select   'bbb ', 'b车型 ', 'htzz-2 ', '铆接车厢 ',1000, '2007-7-1 '
insert   into   工资表   select   'bbb ', 'b车型 ', 'htzz-2 ', '连接车厢 ',2000, '2007-7-1 '
/*
使用SQL产生以下工资核算表
客户姓名       车型         合同编号                         工时费用                                               合计               派工日期
aaa               a车型         htzz-1       (切割车厢)2000元,(焊合车厢)1500元                 3500               2007-7-1
bbb               b车型         htzz-2       (铆接车厢)1000元,(连接车厢)2000元                 3000               2007-1-1
*/

drop   table   工资表

[解决办法]
create function dbo.uf_gets(@客户姓名 varchar(10))
returns varchar(100)
as
begin
declare @s varchar(100)
set @s= ' '
select @s=@s+ ',( '+修理内容+ ') '+rtrim(cast(修理费用 as int)) from 工资表 where 客户姓名=@客户姓名
set @s=stuff(@s,1,1, ' ')
return @s
end
go
select distinct 客户姓名,车型,合同编号,dbo.uf_gets(客户姓名) as '工时费用 ',派工日期 from 工资表
[解决办法]
create table 工资表
(
客户姓名 nvarchar(50),
车型 nvarchar(50),
合同编号 nvarchar(50),
修理内容 nvarchar(100),
修理费用 decimal(13,2),
派工日期 datetime
)
insert into 工资表 select 'aaa ',N 'a车型 ', 'htzz-1 ',N '切割车厢 ',2000, '2007-7-1 '
insert into 工资表 select 'aaa ',N 'a车型 ', 'htzz-1 ',N '焊合车厢 ',1500, '2007-7-1 '
insert into 工资表 select 'bbb ',N 'b车型 ', 'htzz-2 ',N '铆接车厢 ',1000, '2007-7-1 '
insert into 工资表 select 'bbb ',N 'b车型 ', 'htzz-2 ',N '连接车厢 ',2000, '2007-7-1 '
/*
使用SQL产生以下工资核算表
客户姓名 车型 合同编号 工时费用 合计 派工日期
aaa a车型 htzz-1 (切割车厢)2000元,(焊合车厢)1500元 3500 2007-7-1
bbb b车型 htzz-2 (铆接车厢)1000元,(连接车厢)2000元 3000 2007-1-1
*/


create function f1(@id varchar(100))
returns varchar(8000)
begin
declare @str varchar(8000)
set @str= ' '
select @str=@str+ '( '+修理内容+ ') '+rtrim(修理费用)+ '元 ' from 工资表 where 客户姓名=@id
return @str
end


select 客户姓名,车型,合同编号,工时费用=dbo.f1(客户姓名),合计=sum(修理费用),派工日期=convert(char(10),派工日期,120)
from 工资表
group by 客户姓名,车型,合同编号,convert(char(10),派工日期,120)


drop function f1


drop table 工资表
[解决办法]
create function 工时费用(@客户姓名 varchar(50),@车型 varchar(50),@合同编号 varchar(50),@派工日期 smalldatetime)
returns varchar(1000)
as
begin
declare @s varchar(1000)
select @s=isnull(@s+ ', ', ' ')+ '( '+修理内容+ ') '+ltrim(修理费用)+ '元 ' from 工资表
where 客户姓名=@客户姓名 and 车型=@车型 and 合同编号=@合同编号 and 派工日期=@派工日期
return(@s)
end
go
select 客户姓名,车型,合同编号,sum(修理费用) 合计,dbo.工时费用( 客户姓名,车型,合同编号,派工日期) 工时费用,派工日期 from 工资表 group by 客户姓名,车型,合同编号,派工日期

[解决办法]
--函数
create function fn_工时费用(
@客户姓名 varchar(50),
@车型 varchar(50),
@合同编号 varchar(50),
@派工日期 datetime
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r= ' '
select @r=@r+ ',( '+修理内容+ ') '+cast(修理费用 as varchar)+ '元 '
from 工资表
where 客户姓名=@客户姓名
and 车型=@车型
and 合同编号=@合同编号
and convert(varchar(10),派工日期,120)=convert(varchar(10),@派工日期,120)
if @r <> ' '
set @r=stuff(@r,1,1, ' ')
return @r
end
go

--
select 客户姓名,车型,合同编号,sum(修理费用) 合计,
dbo.fn_工时费用( 客户姓名,车型,合同编号,convert(varchar(10),派工日期,120)) 工时费用,
convert(varchar(10),派工日期,120) as 派工日期
from 工资表 group by 客户姓名,车型,合同编号,convert(varchar(10),派工日期,120)

[解决办法]
--创建函数
create function dbo.fn_test(@客户姓名 varchar(50))
returns varchar(8000)
as
begin
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ', '+ '( '+修理内容+ ') '+cast(修理费用 as varchar)+ '元 ' from 工资表 where 客户姓名=@客户姓名
return stuff(@sql,1,1, ' ')
end
go

--调用函数
select 客户姓名,车型,合同编号,dbo.fn_test(客户姓名) as 工时费用,sum(修理费用) as 合计,
convert(varchar(10),派工日期,120) as 派工日期
from 工资表 group by 客户姓名,车型,合同编号,派工日期

/*
客户姓名 车型 合同编号 工时费用 合计 派工日期
--------- -------- ----------- -------------------------------------- -------- -------------
aaa a车型 htzz-1 (切割车厢)2000.00元,(焊合车厢)1500.00元 3500.00 2007-07-01
bbb b车型 htzz-2 (铆接车厢)1000.00元,(连接车厢)2000.00元 3000.00 2007-07-01

(所影响的行数为 2 行)
*/
我的异常网推荐解决方案:软件开发者薪资,http://www.myexception.cn/other/1391128.html

热点排行