提问帖子数 回复帖子数 所在地区 所在行业3 4 山东 机械6 5 海南 冶金5 8 北京 教育
如何生成以下的表格啊
山东
机械 提问帖总数/回答帖子总数
各位大侠帮忙看看怎么做好啊
如何生成以下的表格啊
山东
机械 提问帖总数/回答帖子总数
各位大侠帮忙看看怎么做好啊
-- Author: HEROWANG(让你望见影子的墙)
-- Date : 2010-01-11 21:55:22
-- blog : blog.csdn.net/herowang
---------------------------------
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
go
CREATE TABLE [tb] (提问帖子数 INT,回复帖子数 INT,所在地区 VARCHAR(4),所在行业 VARCHAR(4))
INSERT INTO [tb]
SELECT 3,4,'山东','机械' UNION ALL
SELECT 6,5,'海南','冶金' UNION ALL
SELECT 5,8,'北京','教育'
declare @s varchar(8000)
set @s='select 所在行业'
select @s=@s+' ,'''+所在地区+'''=isnull(max(case when 所在地区='''+所在地区 +''' then ltrim(提问帖子数)+''/''+ltrim(回复帖子数) end),'''')'
from tbprint @sexec(@s+'from tb group by 所在行业')所在行业 山东 海南 北京
机械 3/4
教育 5/8
冶金 6/5
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
go
CREATE TABLE [tb] (提问帖子数 INT,回复帖子数 INT,所在地区 VARCHAR(4),所在行业 VARCHAR(4))
INSERT INTO [tb]
SELECT 3,4,'山东','机械' UNION ALL
SELECT 6,5,'海南','冶金' UNION ALL
SELECT 5,8,'北京','教育'select
所在行业 ,
isnull(max(case when 所在地区='山东' then ltrim(提问帖子数)+'/'+ltrim(回复帖子数) end),'') as '山东' ,
isnull(max(case when 所在地区='海南' then ltrim(提问帖子数)+'/'+ltrim(回复帖子数) end),'') as '海南',
isnull(max(case when 所在地区='北京' then ltrim(提问帖子数)+'/'+ltrim(回复帖子数) end),'') as '北京'
from
tb
group by
所在行业
/*所在行业 山东 海南 北京
---- ------------------------- ------------------------- -------------------------
机械 3/4
教育 5/8
冶金 6/5
警告: 聚合或其他 SET 操作消除了空值。(3 行受影响)
*/
DROP TABLE [tb]
go
CREATE TABLE [tb] (提问帖子数 INT,回复帖子数 INT,所在地区 VARCHAR(4),所在行业 VARCHAR(4))
INSERT INTO [tb]
SELECT 3,4,'山东','机械' UNION ALL
SELECT 3,4,'山东','教育' UNION ALL
SELECT 6,5,'海南','冶金' UNION ALL
SELECT 5,8,'北京','教育'declare @sql varchar(8000)
select @sql = isnull(@sql+',','')+'max(case 所在地区 when '''+所在地区+'''
then ltrim(cast(提问帖子数*100.0/回复帖子数 as dec(18,2)))+''%'' else ''0%'' end) as ['+所在地区+']'
from (select distinct top 100 percent 所在地区 from [tb] order by 所在地区 desc) t
select @sql = 'select 所在行业,'+@sql+' from tb group by 所在行业'exec(@sql)
----------------------------
机械 75.00% 0% 0%
教育 75.00% 0% 62.50%
冶金 0% 120.00% 0%