if exists(select name from sysobjects where name='test')
drop table test
go
Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',10)
insert test values('张三','数学',10)
insert test values('张三','英语',10)
insert test values('李四','语文',20)
insert test values('李四','数学',20)
insert test values('李四','英语',20)
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) '+km+''
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
print @sql@sql="select name,sum(case km when '数学 ' then cj end) 数学 ,sum(case km when '英语 ' then cj end) 英语 ,sum(case km when '语文 ' then cj end) 语文 from test group by name
"
结果如下:name 数学 英语 语文
---------- ----------- ----------- -----------
李四 10 10 10
张三 20 20 20 现在想:
name 数学 英语 语文
---------- ----------- ----------- -----------
李四 10(33.3%) 10(33.3%) 10(33.3%)
张三 20(33.3%) 20(33.3%) 20 (33.3%)
SQL该怎么写
drop table test
go
Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',10)
insert test values('张三','数学',10)
insert test values('张三','英语',10)
insert test values('李四','语文',20)
insert test values('李四','数学',20)
insert test values('李四','英语',20)
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) '+km+''
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
print @sql@sql="select name,sum(case km when '数学 ' then cj end) 数学 ,sum(case km when '英语 ' then cj end) 英语 ,sum(case km when '语文 ' then cj end) 语文 from test group by name
"
结果如下:name 数学 英语 语文
---------- ----------- ----------- -----------
李四 10 10 10
张三 20 20 20 现在想:
name 数学 英语 语文
---------- ----------- ----------- -----------
李四 10(33.3%) 10(33.3%) 10(33.3%)
张三 20(33.3%) 20(33.3%) 20 (33.3%)
SQL该怎么写
解决方案 »
- 问一个sql分页的奇怪问题
- 关于sql2000和sql2005的一个问题
- 有一列字段是姓名,但两个字的姓名中间有个空格,这空格怎么清除啊?
- 获取本周的帖子,怎么写SQL 语句 ??
- 请高手赐教, 有没有这样的SQL语句呢?
- 为什么数据库按照字符串类型的字段排序会不正常(稍微大点数据量的情况下)
- 临时表的问题!
- 哪里有access数据库系统源码?(高分)
- 统计问题
- 如何用SQL语句实现,使多条重复的记录,只剩下一条记录,其余的都删掉?
- 关于sqlserver自己写的自定义表值函数一个很奇怪的问题
- 、偏移量为 0x000010f26a4000 的位置执行 读取 期间 ,操作系统已经向 SQL Server 返回了错误 23(数据错误(循环冗余检查)。)。
if exists(select name from sysobjects where name='test')
drop table test
go
Create table test (name nvarchar(10),km Nvarchar(10),cj int)
go
insert test values(N'张三',N'语文',10)
insert test values(N'张三',N'数学',10) insert test values(N'张三',N'英语',10)
insert test values(N'李四',N'语文',20)
insert test values(N'李四',N'数学',20) insert test values(N'李四',N'英语',20) declare @sql nvarchar(4000)
set @sql = N'select name'
select @sql = @sql + ',rtrim(sum(case km when N'''+km+''' then cj else 0 end))+''('''
+'+rtrim(cast(sum(case km when N'''+km+''' then cj else 0 end)*100.0/sum(cj) as decimal(5,1)))+'')'''
+' as '+km+''
from (select distinct km from test) as a
PRINT @sql
select @sql = @sql+N' from test group by name'
exec(@sql)/*
name 英语 数学 语文
李四 20(33.3) 20(33.3) 20(33.3)
张三 10(33.3) 10(33.3) 10(33.3)*/
drop table test
gocreate table test (name nvarchar(10),km nvarchar(10),cj int)
go
insert test values(N'张三',N'语文',10)
insert test values(N'张三',N'数学',10)
insert test values(N'张三',N'英语',10)
insert test values(N'李四',N'语文',20)
insert test values(N'李四',N'数学',20)
insert test values(N'李四',N'英语',20)select name,
max(case km when N'数学' then cj end) 数学,
max(case km when N'英语' then cj end) 英语,
max(case km when N'语文' then cj end) 语文
from(
select name,km,
convert(nvarchar,cj)
+'('+convert(nvarchar,convert(decimal(5,1),100.0*cj/sum(cj)over(partition by name)))
+'%)' as cj
from test
)t
group by name