--创建处理的存储过程
create proc p_qry
@项目名称 varchar(4000) --要查询的项目名称列表
as
declare @s varchar(8000)
select @项目名称=','+@项目名称+','
,@s=''
select @s=@s+',['+项目名称
+'_上年实际]=sum(case 项目名称 when '''+项目名称
+''' then 上年实际 else 0 end),['+项目名称
+'_今年计划]=sum(case 项目名称 when '''+项目名称
+''' then 今年计划 else 0 end),['+项目名称
+'_计划增长]=sum(case 项目名称 when '''+项目名称
+''' then 计划增长 else 0 end),['+项目名称
+'_累计完成]=sum(case 项目名称 when '''+项目名称
+''' then 累计完成 else 0 end),['+项目名称
+'_同比增长]=sum(case 项目名称 when '''+项目名称
+''' then 同比增长 else 0 end)'
from 表
where charindex(','+项目+',',','+@项目名称+',')>0exec('select 地区'+@s+' from 表 
where charindex('',''+项目名称+'','','','+@项目名称+','')>0
group by 地区')
go--调用
exec p_qry 'aaaa1,aaaa2'

解决方案 »

  1.   

    上面的存储过程成功,现在又有问题了,还是请您帮忙。我想让查询出来的数据按照
    沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛上面的顺序排列怎么办啊?想实现如下表格        aaaa1                                     |       aaaa2
    地区 上年实际 今年计划 计划增长 累计完成 同比增长 |上年实际......... 
    沈阳    20      25       60      100      10         23
    大连    10      15       50      300      15         20
    鞍山 ...................................................
    抚顺.....................................................是不是要改这段?????exec('select 地区'+@s+' from 表 
    where charindex('',''+项目名称+'','','','+@项目名称+','')>0
    group by 地区')
    go
      

  2.   

    大哥,测试数据出问题了        aaaa1                                     |       aaaa1             aaaa1
    地区 上年实际 今年计划 计划增长 累计完成 同比增长 |上年实际.........    ........
    大连    10      15       50      300      15         10                     10
    沈阳    20      25       60      100      10         20                     20
    出现了3列aaaa1的项目和3列aaaa2的项目
      

  3.   


    --创建处理的存储过程
    create proc p_qry
    @项目名称 varchar(4000) --要查询的项目名称列表
    as
    declare @s varchar(8000)
    select @项目名称=','+@项目名称+','
    ,@s=''
    select @s=@s+',['+项目名称
    +'_上年实际]=sum(case 项目名称 when '''+项目名称
    +''' then 上年实际 else 0 end),['+项目名称
    +'_今年计划]=sum(case 项目名称 when '''+项目名称
    +''' then 今年计划 else 0 end),['+项目名称
    +'_计划增长]=sum(case 项目名称 when '''+项目名称
    +''' then 计划增长 else 0 end),['+项目名称
    +'_累计完成]=sum(case 项目名称 when '''+项目名称
    +''' then 累计完成 else 0 end),['+项目名称
    +'_同比增长]=sum(case 项目名称 when '''+项目名称
    +''' then 同比增长 else 0 end)'
    from 表
    where charindex(','+项目名称+',',','+@项目名称+',')>0
    group by 项目名称exec('select 地区'+@s+' from 表 
    where charindex('',''+项目名称+'','','','+@项目名称+','')>0
    group by 地区
    order by charindex('',''+地区+'','','',沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛,''
    ')
    go--调用
    exec p_qry 'aaaa1,aaaa2'
      

  4.   

    存储过程建立检测都成功--调用
    exec p_qry 'aaaa1,aaaa2'
    提示服务器: 消息 170,级别 15,状态 1,行 4
    第 4 行: ',沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛,' 附近有语法错误。
      

  5.   

    --测试--测试数据
    create table 表(id int,项目名称 varchar(10),地区 varchar(10),上年实际 int,今年计划 int,计划增长 int,累计完成 int,同比增长 int)
    insert 表 select 1,'aaaa1','大连',10,15,50,300,15
    union all select 2,'aaaa1','沈阳',20,25,60,100,10
    union all select 3,'aaaa1','鞍山',30,20,50,200,17
    union all select 4,'aaaa1','抚顺',8 ,18,23,90 ,15
    union all select 5,'aaaa2','大连',20,26,50,300,15
    union all select 6,'aaaa2','沈阳',23,15,50,300,15
    union all select 7,'aaaa2','鞍山',10,15,50,300,15
    union all select 8,'aaaa2','抚顺',10,15,50,300,15
    go
    --创建处理的存储过程
    create proc p_qry
    @项目名称 varchar(4000) --要查询的项目名称列表
    as
    declare @s varchar(8000)
    select @项目名称=','+@项目名称+','
    ,@s=''
    select @s=@s+',['+项目名称
    +'_上年实际]=sum(case 项目名称 when '''+项目名称
    +''' then 上年实际 else 0 end),['+项目名称
    +'_今年计划]=sum(case 项目名称 when '''+项目名称
    +''' then 今年计划 else 0 end),['+项目名称
    +'_计划增长]=sum(case 项目名称 when '''+项目名称
    +''' then 计划增长 else 0 end),['+项目名称
    +'_累计完成]=sum(case 项目名称 when '''+项目名称
    +''' then 累计完成 else 0 end),['+项目名称
    +'_同比增长]=sum(case 项目名称 when '''+项目名称
    +''' then 同比增长 else 0 end)'
    from 表
    where charindex(','+项目名称+',',','+@项目名称+',')>0
    group by 项目名称exec('select 地区'+@s+' from 表 
    where charindex('',''+项目名称+'','','','+@项目名称+','')>0
    group by 地区
    order by charindex('',''+地区+'','','',沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛,'')
    ')
    go--调用
    exec p_qry 'aaaa1,aaaa2'
    godrop proc p_qry
    drop table 表/*--测试结果
    地区         aaaa1_上年实际  aaaa1_今年计划  aaaa1_计划增长  aaaa1_累计完成  aaaa1_同比增长  aaaa2_上年实际  aaaa2_今年计划  aaaa2_计划增长  aaaa2_累计完成  aaaa2_同比增长  
    ---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
    沈阳         20          25          60          100         10          23          15          50          300         15
    大连         10          15          50          300         15          20          26          50          300         15
    鞍山         30          20          50          200         17          10          15          50          300         15
    抚顺         8           18          23          90          15          10          15          50          300         15(所影响的行数为 4 行)
    --*/
      

  6.   

    好用了,上面的order by charindex('',''+地区+'','','',沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛,'')  <--此处少了一个括号