初表如下:
年份 销量
2005 100
2006 200
2007 300写一段SQL语言,能显示这样一个表
年份 2005 2006 2007
销量 100 200 300
年份 销量
2005 100
2006 200
2007 300写一段SQL语言,能显示这样一个表
年份 2005 2006 2007
销量 100 200 300
解决方案 »
- 关于用int字段人工排序,如果值不连续就无法实现。
- 还是日期时间查询的问题,这次终于表达清楚了!
- 这个存储过程怎么才能失败回滚?
- 求一条sql语句,如何查找满足条件的下一条记录
- 如何取得当前登陆用户的登陆名
- 工作十年存疑——存储过程OR多层结构
- windows server 2003 作为客户端无法连接另一台windows server 2003 上的sqlserver2000服务器
- 求SQL语句
- SQL2005下用CLR(C#)写存储过程与扩展存储过程的写法不同
- 麻烦邹建大哥给看看-------事据库事务是怎么进行控制的?
- SQL排序问题
- 请指教:我想脱离windows2003中文版,安装新的windows2008中文版和vs.net2008中文版,就是不知能带来哪些不便和冲突。我现在用的有VB6、水晶报表9.2,office2003中文版、SQL SERVER 2000+sp3a、Inst
case .. when ...
Go
Declare @1 Table([year] int,Qty int)
Insert Into @1
Select 2005, 100 Union All
Select 2006, 200 Union All
Select 2007, 300 Select * From
(Select '销量' As [年份],[Year],Qty From @1) P
Pivot
(SUM(Qty) For [Year] in([2005],[2006],[2007])) Pv/*
年份 2005 2006 2007
---- ----------- ----------- -----------
销量 100 200 300
*/
insert into tb select 2005,100
insert into tb select 2006,200
insert into tb select 2007,300declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+'sum(case when nf='''+ltrim(nf)+''' then xl else 0 end ) as ['+ltrim(nf)+'年]'
from tb group by nf
exec('select '+@sql+' from tb')select
sum(case when nf='2005' then xl else 0 end ) as [2005年],
sum(case when nf='2006' then xl else 0 end ) as [2006年],
sum(case when nf='2007' then xl else 0 end ) as [2007年]
from tb100 200 300
max(case 年份 when 2005 then 销量 else 0 end) '2005',
max(case 年份 when 2006 then 销量 else 0 end) '2006',
max(case 年份 when 2007 then 销量 else 0 end) '2007'
from tb
create table sss(年份 int,销量 int)
insert into sss
select 2005,100 union all
select 2006,200 union all
select 2007,300
declare @sql varchar(8000),@sql1 varchar(8000)
set @sql='select ''年份'''
set @sql1='select ''销量'''
select @sql=@sql+',['+ltrim(px)+']=max(case px when '+ltrim(px)+' then 年份 else 0 end)',
@sql1=@sql1+',['+ltrim(px)+']=max(case px when '+ltrim(px)+' then 销量 else 0 end)'
from (select px=(select count(1) from sss where 年份<=a.年份) from sss a)b
set @sql=@sql+' from (select px=(select count(1) from sss where 年份<=a.年份),* from sss a)b '
set @sql1=@sql1+' from (select px=(select count(1) from sss where 年份<=a.年份),* from sss a)b'
exec(@sql+' union all '+@sql1)
declare @t table (年份 int,销量 int)
insert into @t
select 2005,100 union all
select 2006,200 union all
select 2007,300;with
t as(
select '销量'as '年份',年份 as a,销量 as b from @t
)
select *
from t
pivot(
max(b)
for a
in([2005], [2006], [2007])
)a