declare @sql varchar(4000)
set @sql=''
select @sql=@sql+',['+ 编码+']=sum(case 编码 when '+ 编码+' then 用户数 else 0 end) from tbl'
set @sql='select '+right(@sql,len(@sql)-1)+ ' from tbl'
exec(@sql)
--建立测试环境
Create Table 表(区域 varchar(100),类型 varchar(100),价格 varchar(100))
--插入数据
insert into 表
select '1长春','1.标准全球通','234' union
select '1长春','2.全球通资费套餐','5423' union
select '1长春','3.全球通优惠','454' union
select '2吉林','1.标准全球通','297' union
select '2吉林','2.全球通资费套餐','12' union
select '2吉林','3.全球通优惠','29949'
--测试语句
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT 区域'
SELECT @SQL= @SQL+
',min(CASE WHEN 类型 = ''' + 类型 + ''' THEN 价格 END) [' + 类型 + ']'
FROM (SELECT DISTINCT 类型 FROM 表) A
SET @SQL=@SQL+' FROM 表 GROUP BY 区域'
exec (@SQL)
楼主误人不浅啊,下次要说清楚 ,按你要求改动如下:
declare @sql varchar(4000)
set @sql=''
select @sql=@sql+',['+ 编码+']=sum(case 编码 when '+ 编码+' then 用户数 else 0 end) from tbl'
set @sql='select 地区 '+right(@sql,len(@sql)-1)+ ' from tbl group by 地区 '
exec(@sql)
jinjazz(近身剪(充电中...)) ---不需要加group by ,应加distinct才对。
代码如下:
declare @sql varchar(4000)
set @sql=''
select @sql=@sql+',['+ 编码+']=sum(case 编码 when '+ 编码+' then 用户数 else 0 end) from tbl'
set @sql='select distinct '+right(@sql,len(@sql)-1)+ ' from tbl '
exec(@sql)
jinjazz(近身剪(充电中...)) ---thanks .
改正如下:
declare @sql varchar(4000)
set @sql=''
select @sql=@sql+',['+ 编码+']=sum(case 编码 when '+ 编码+' then 用户数 else 0 end) from tbl'
set @sql='select '+right(@sql,len(@sql)-1)+ ' from tbl group by '
exec(@sql)
--建立测试环境
Create Table 表(id varchar(10),amount integer,remark varchar(10))
--插入数据
insert into 表
select '1','3','aaa' union
select '1','5','bbb' union
select '1','4','ccc' union
select '2','10','pkoge' union
select '2','12','daf'
go
--测试语句
CREATE FUNCTION FunMergeCharField(@vchA varchar(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r=''
SELECT @r=@r+','+remark FROM 表 WHERE id=@vchA
RETURN(substring(@r,2,8000))
END
GO
select id,sum(amount) as sum,dbo.FunMergeCharField(id) as remark叠加 from 表 group by id
--删除测试环境
Drop Table 表
Drop FUNCTION FunMergeCharField
--分成多列一楼的就可以,如果编码有重复,可以这样写
declare @sql varchar(4000)
set @sql=''
select @sql=@sql+',['+ 编码+']=sum(case 编码 when '+ 编码+' then 用户数 else 0 end)' from (select distinct 编码 from 表) A
set @sql='select '+right(@sql,len(@sql)-1)+ ' from 表'
exec(@sql)