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 工资表

解决方案 »

  1.   

    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 工资表
      

  2.   

    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 工资表
      

  3.   

    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 客户姓名,车型,合同编号,派工日期
      

  4.   

    select 客户姓名,车型,合同编号, 修理内容+(convert(char(50),修理费用))  from 工资表
      

  5.   

    select 客户姓名,车型,合同编号, 修理内容+(convert(char(50),修理费用)),sum(修理费用) 合计  from 工资表
      

  6.   

    忘写合计了~~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 客户姓名,车型,合同编号,dbo.uf_gets(客户姓名) as '工时费用',合计=sum(修理费用),派工日期 from 工资表
    group by 客户姓名,车型,合同编号
      

  7.   

    --函数
    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)
      

  8.   

    --创建函数
    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 行)
    */