create table A
(
Name varchar(10),
Province varchar(20),
Score int
)
insert A
select '李三','四川',5 union
select '小王','四川',3 union
select '小張','廣州',3 union
select '李三','廣州',2 union
select '小張','湖南',3 union
select '李三','湖南',4--查询
declare @sql varchar(1000)
select @sql=''
select @sql=@sql+',sum(case when Province='''+Province+''' then Score else 0 end) as '+quotename(Province)
from A group by Province
select @sql='select Name'+@sql+',sum(Score) as 总计 from A group by Name order by Name'
exec(@sql)--删除测试环境
drop table A
--结果
/*
Name 廣州 湖南 四川 总计
---------- ----------- ----------- ----------- -----------
李三 2 4 5 11
小王 0 0 3 3
小張 3 3 0 6
*/
(
Name varchar(10),
Province varchar(20),
Score int
)
insert A
select '李三','四川',5 union
select '小王','四川',3 union
select '小張','廣州',3 union
select '李三','廣州',2 union
select '小張','湖南',3 union
select '李三','湖南',4--查询
declare @sql varchar(1000)
select @sql=''
select @sql=@sql+',sum(case when Province='''+Province+''' then Score else 0 end) as '+quotename(Province)
from A group by Province
select @sql='select Name'+@sql+',sum(Score) as 总计 from A group by Name order by Name'
exec(@sql)--删除测试环境
drop table A
--结果
/*
Name 廣州 湖南 四川 总计
---------- ----------- ----------- ----------- -----------
李三 2 4 5 11
小王 0 0 3 3
小張 3 3 0 6
*/
解决方案 »
- 请教
- 如何比较两列不同值
- 真搞不明白,这个存储过程为什么没有返回值??
- 求一 简单的SQL语句(SUM)在线等,立刻揭贴
- 这本书有没有电子版下载?<<中文版 SQL Server 2000 开发与管理应用实例>> 作者:邹建
- SQL 非常常见的问题。在线等啊.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11111
- 求一句SQL
- 高难度行列转换!急用,请大家帮忙
- 太简单了,都不知道该怎么问了
- 关于SQL得问题,高手请帮忙!!!!!!!!
- mssql中连接ACCESS数据库的字符串 并操作数据库 比如添加数据 删除数据 修改表结构的语句 改怎么写
- 如何大幅提高每秒插入数据库的条数?DELPHI+SQLSERVER
可以再建一个表Province(Province_id,Province_name)
Province_id Province_name
1 四川
2 广州
3 湖南
。然后把所有出现得身份都建一行,然后在tb1表里面Province列改成Province_id列
然后就可以使用下面得语句了
select name,四川=sum(case Province_id when 1 then Score end),
廣州=sum(case Province_id when 2 then Score end),--这里你有几个省就列几个
湖南=sum(case Province_id when 3 then Score end),
总计=sum(score) from tbl order by name
select name,sum(case province when '廣州'then score else 0 end) as 廣州 ,
sum(case province when '湖南'then score else 0 end) as 湖南 ,
sum(case province when '四川'then score else 0 end) as 四川
from a group by a.name
To:duoluohuifeng(堕落回风) 你沒有注意到“省份必須根據TB1表中所有出現的省份進行統計”這句話
To:churchatp1(阿牛) 你的要改變數據庫結構也不行的
To:vivianfdlpw() 你的語句我執行了一下,好象不行,出現如下錯誤:
伺服器: 訊息 170,層級 15,狀態 1,行 1
行 1: '?' 附近的語法不正確。
(
Name varchar(10),
Province varchar(20),
Score int
)
insert A
select '李三','四川',5 union
select '小王','四川',3 union
select '小張','廣州',3 union
select '李三','廣州',2 union
select '小張','湖南',3 union
select '李三','湖南',4--测试
declare @s varchar(8000)
set @s = ''select @s = @s +','+Province+'= sum(case province when'''+province+'''then score else 0 end)'
from A group by Province order by Provinceexec ('select name '+@s+',sum(Score) As Total from A group by Name order by Name')--测试结果
-- Name 广州 湖南 四川 Total
-- 1 李三 2 4 5 11
-- 2 小王 0 0 3 3
-- 3 小張 3 3 0 6--测试结束
drop table A