create function getstr(@分店名称 varchar(20),@职位 varchar(20))
returns varchar(2000)
as 
begin
declare @str varchar(2000)
set @str=''
select @str=@str+' '+rtrim(人员名单) from 表 
where 分店名称=@分店名称 and 职位=@职位
set @str=right(@str,len(@str)-1)
return @str
end
go语句:
select 分店名称,职位,count(*) 人数,dbo.getstr(分店名称,职位) 人员名单 from 表 group by 分店名称,职位

解决方案 »

  1.   

    create function getstr(@分店名称 varchar(20),@职位 varchar(20))
    returns varchar(2000)
    as 
    begin
    declare @str varchar(2000)
    set @str=''
    select @str=@str+' '+rtrim(人员名单) from 表 
    where 分店名称=@分店名称 and 职位=@职位
    set @str=right(@str,len(@str)-1)
    return @str
    end
    go语句:
    select 分店名称,职位,count(*) 人数,dbo.getstr(分店名称,职位) 人员名单 from 表 group by 职位,分店名称注意group by的职位和分店名称顺序
      

  2.   

    感谢这位pengdali(大力)大哥,我顺利的通过了你的代码,十分感谢,激动万分,
    记得上次也是你帮我,做了一道难题,我会给你满分的,别急
    不过我的数据库是用Access做的,我不知道如何在Access中实现该查询。
      

  3.   

    另外我用的是Delphi6+Access做的人事档案管理系统,该如何实现上面的查询呢?
      

  4.   

    你在sql中能连Access吗??SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.mdb";User ID=Admin;Password=')...YourTable
      

  5.   

    你把下面的代码改一下吧!需要临时表!
    set nocount on
    declare @YourResultTable  table (id int, value varchar(10))
    insert @YourResultTable  values(1,        'cool')
    insert @YourResultTable  values(1,        'nice')
    insert @YourResultTable  values(1,        'wow')
    insert @YourResultTable  values(2,        'cool')
    insert @YourResultTable  values(2,        'wow')
    insert @YourResultTable  values(3,        'cool')
    insert @YourResultTable  values(3,        'nice')
    insert @YourResultTable  values(4,        'nice')
    select * from @YourResultTable
    declare 
    @z varchar(100),
     @Step int,
     @q intselect  @Step = 0, @q = 0declare @ProcessTable table (id int, value varchar(100), ProcessStep int)
    insert @ProcessTable
     select id, value, 0
     from  @YourResultTable
     order by id, valueupdate  @ProcessTable
     set  @z = value = case @q when id then @z else '' end + value +
    ',' ,
      @q = @q + case @q when id then 0 else 1 end,
      @Step = ProcessStep = @Step + 1
     from  @ProcessTableselect  *
     from  @ProcessTable t
      join (select max(ProcessStep) MaxStep
       from @ProcessTable
       group by id) x
      on ProcessStep = MaxStepset nocount off