编码 用户数
01 100
02 120
03 160
04 320
合并后的效果应如下:
100 120 160 320
16 个解决方案
#1
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)
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)
#2
--建立测试环境
Create Table 表(编码 varchar(10),用户数 varchar(10))
--插入数据
insert into 表
select '01','100' union
select '02','120' union
select '03','160' union
select '04','320'
declare @str varchar(8000)
--测试语句
set @str=''
select @str=@str+用户数+' ' from 表
print @str
/*--输出
100 120 160 320
--*/
--删除测试环境
Drop Table 表
Create Table 表(编码 varchar(10),用户数 varchar(10))
--插入数据
insert into 表
select '01','100' union
select '02','120' union
select '03','160' union
select '04','320'
declare @str varchar(8000)
--测试语句
set @str=''
select @str=@str+用户数+' ' from 表
print @str
/*--输出
100 120 160 320
--*/
--删除测试环境
Drop Table 表
#3
declare @a varchar(4000)
set @a=''
select @a=@a+' '+用户数 from 表
select stuff(@a,1,1,'')
set @a=''
select @a=@a+' '+用户数 from 表
select stuff(@a,1,1,'')
#4
你们实现的都是合并后一行一列,我要求把分成多列!
能实现吗?
能实现吗?
#5
楼主,你有没有看懂我代码,他实现的是一行多列,列数由编码个数动态确定。
#6
那你group by
#7
--分成多列一楼的就可以,如果编码有重复,可以这样写
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)
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)
#8
--建立测试环境
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
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
#9
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)
改正如下:
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)
#10
我重新发一遍吧,估计我说的不够清楚。谢谢了!
1长春 1.标准全球通 234
1长春 2.全球通资费套餐 5423
1长春 3.全球通优惠 454
2吉林 1.标准全球通 297
2吉林 2.全球通资费套餐 12
2吉林 3.全球通优惠 29949
要生成的报表要是这样的:
地区 1.标准全球通 2.全球通资费套餐 3.全球通优惠
长春 234 5423 454
吉林 297 12 29949
1长春 1.标准全球通 234
1长春 2.全球通资费套餐 5423
1长春 3.全球通优惠 454
2吉林 1.标准全球通 297
2吉林 2.全球通资费套餐 12
2吉林 3.全球通优惠 29949
要生成的报表要是这样的:
地区 1.标准全球通 2.全球通资费套餐 3.全球通优惠
长春 234 5423 454
吉林 297 12 29949
#11
地区 1.标准全球通 2.全球通资费套餐 3.全球通优惠
上面这一行是列名,不需要显示出来
上面这一行是列名,不需要显示出来
#12
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)
代码如下:
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)
#13
楼主误人不浅啊,下次要说清楚 ,按你要求改动如下:
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)
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)
#14
--建立测试环境
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)
--删除测试环境
Drop Table 表
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)
--删除测试环境
Drop Table 表
#15
非常谢谢各位!
不知道我如何给分了,就这么一点分,我都有点惭愧了!
不知道我如何给分了,就这么一点分,我都有点惭愧了!
#16
不知道如果其中一条记录中有NULL怎么办呢,好像无法生成结果出来
#1
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)
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)
#2
--建立测试环境
Create Table 表(编码 varchar(10),用户数 varchar(10))
--插入数据
insert into 表
select '01','100' union
select '02','120' union
select '03','160' union
select '04','320'
declare @str varchar(8000)
--测试语句
set @str=''
select @str=@str+用户数+' ' from 表
print @str
/*--输出
100 120 160 320
--*/
--删除测试环境
Drop Table 表
Create Table 表(编码 varchar(10),用户数 varchar(10))
--插入数据
insert into 表
select '01','100' union
select '02','120' union
select '03','160' union
select '04','320'
declare @str varchar(8000)
--测试语句
set @str=''
select @str=@str+用户数+' ' from 表
print @str
/*--输出
100 120 160 320
--*/
--删除测试环境
Drop Table 表
#3
declare @a varchar(4000)
set @a=''
select @a=@a+' '+用户数 from 表
select stuff(@a,1,1,'')
set @a=''
select @a=@a+' '+用户数 from 表
select stuff(@a,1,1,'')
#4
你们实现的都是合并后一行一列,我要求把分成多列!
能实现吗?
能实现吗?
#5
楼主,你有没有看懂我代码,他实现的是一行多列,列数由编码个数动态确定。
#6
那你group by
#7
--分成多列一楼的就可以,如果编码有重复,可以这样写
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)
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)
#8
--建立测试环境
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
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
#9
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)
改正如下:
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)
#10
我重新发一遍吧,估计我说的不够清楚。谢谢了!
1长春 1.标准全球通 234
1长春 2.全球通资费套餐 5423
1长春 3.全球通优惠 454
2吉林 1.标准全球通 297
2吉林 2.全球通资费套餐 12
2吉林 3.全球通优惠 29949
要生成的报表要是这样的:
地区 1.标准全球通 2.全球通资费套餐 3.全球通优惠
长春 234 5423 454
吉林 297 12 29949
1长春 1.标准全球通 234
1长春 2.全球通资费套餐 5423
1长春 3.全球通优惠 454
2吉林 1.标准全球通 297
2吉林 2.全球通资费套餐 12
2吉林 3.全球通优惠 29949
要生成的报表要是这样的:
地区 1.标准全球通 2.全球通资费套餐 3.全球通优惠
长春 234 5423 454
吉林 297 12 29949
#11
地区 1.标准全球通 2.全球通资费套餐 3.全球通优惠
上面这一行是列名,不需要显示出来
上面这一行是列名,不需要显示出来
#12
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)
代码如下:
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)
#13
楼主误人不浅啊,下次要说清楚 ,按你要求改动如下:
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)
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)
#14
--建立测试环境
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)
--删除测试环境
Drop Table 表
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)
--删除测试环境
Drop Table 表
#15
非常谢谢各位!
不知道我如何给分了,就这么一点分,我都有点惭愧了!
不知道我如何给分了,就这么一点分,我都有点惭愧了!
#16
不知道如果其中一条记录中有NULL怎么办呢,好像无法生成结果出来