如何写这样的SQL语句?

原创 2004年09月19日 15:40:00

出自:http://community.csdn.net/Expert/topic/3372/3372925.xml?temp=.7849237

--测试:

create table js (年 int,月 int,降水 float)
insert into js
select 1971,1,34.5 union
select 1971,2,23 union
select 1971,3,56.0 union
select 1972,1,8.5 union
select 1972,2,23 union
select 1972,3,12.0 union
select 1973,3,122.5

--生成几个中间表
select b.*
into #t1
from(
select b.月,降水=max(b.降水)
from js a,js b
where a.降水>=b.降水  and a.月=b.月
group by b.月
) a inner join js b on a.降水=b.降水
order by b.月

select 年,总降水=sum(降水)
into #t2
from js
group by 年

select #t1.*,#t2.总降水
into #t
from #t1 inner join #t2 on #t1.年=#t2.年

--查询
select convert(varchar (10),年) as [年/月]
 ,[1]=convert(varchar,sum(case 月 when 1 then 降水  end))
 ,[2]=convert(varchar,sum(case 月 when 2 then 降水  end))
 ,[3]=convert(varchar,sum(case 月 when 3 then 降水  end))
        ,[4]=convert(varchar,sum(case 月 when 4 then 降水  end))
 ,[5]=convert(varchar,sum(case 月 when 5 then 降水  end))
 ,[6]=convert(varchar,sum(case 月 when 6 then 降水  end))
        ,[7]=convert(varchar,sum(case 月 when 7 then 降水  end))
 ,[8]=convert(varchar,sum(case 月 when 8 then 降水  end))
 ,[9]=convert(varchar,sum(case 月 when 9 then 降水  end))
        ,[10]=convert(varchar,sum(case 月 when 10 then 降水  end))
 ,[11]=convert(varchar,sum(case 月 when 11 then 降水  end))
 ,[12]=convert(varchar,sum(case 月 when 12 then 降水  end))
        ,合计=convert(varchar,sum(降水))
from js  --这里是表名
group by 年
union all
select '平均' as '年/月',
         [1]=convert(varchar,convert(dec(10,1),avg(case 月 when 1 then 降水  end)))
 ,[2]=convert(varchar,convert(dec(10,1),avg(case 月 when 2 then 降水  end)))
 ,[3]=convert(varchar,convert(dec(10,1),avg(case 月 when 3 then 降水  end)))
        ,[4]=convert(varchar,convert(dec(10,1),avg(case 月 when 4 then 降水  end)))
 ,[5]=convert(varchar,convert(dec(10,1),avg(case 月 when 5 then 降水  end)))
 ,[6]=convert(varchar,convert(dec(10,1),avg(case 月 when 6 then 降水  end)))
        ,[7]=convert(varchar,convert(dec(10,1),avg(case 月 when 7 then 降水  end)))
 ,[8]=convert(varchar,convert(dec(10,1),avg(case 月 when 8 then 降水  end)))
 ,[9]=convert(varchar,convert(dec(10,1),avg(case 月 when 9 then 降水  end)))
        ,[10]=convert(varchar,convert(dec(10,1),avg(case 月 when 10 then 降水  end)))
 ,[11]=convert(varchar,convert(dec(10,1),avg(case 月 when 11 then 降水  end)))
 ,[12]=convert(varchar,convert(dec(10,1),avg(case 月 when 12 then 降水  end)))
        ,合计=convert(varchar,(select sum(平均降水) from(
              select 月,平均降水=avg(降水) from js group by 月)a))
              
from js
union all
select '最大值' as '年/月',
         [1]=convert(varchar,max(case 月 when 1 then 降水  end))
 ,[2]=convert(varchar,max(case 月 when 2 then 降水  end))
 ,[3]=convert(varchar,max(case 月 when 3 then 降水  end))
        ,[4]=convert(varchar,max(case 月 when 4 then 降水  end))
 ,[5]=convert(varchar,max(case 月 when 5 then 降水  end))
 ,[6]=convert(varchar,max(case 月 when 6 then 降水  end))
        ,[7]=convert(varchar,max(case 月 when 7 then 降水  end))
 ,[8]=convert(varchar,max(case 月 when 8 then 降水  end))
 ,[9]=convert(varchar,max(case 月 when 9 then 降水  end))
        ,[10]=convert(varchar,max(case 月 when 10 then 降水  end))
 ,[11]=convert(varchar,max(case 月 when 11 then 降水  end))
 ,[12]=convert(varchar,max(case 月 when 12 then 降水  end))
        ,合计=convert(varchar,(select sum(最大降水) from(
              select 月,最大降水=max(降水) from js group by 月)a))
from js
union all
select '年/月'='出现年份',
         [1]=convert(varchar(4),max(case 月 when 1 then 年 end) )
 ,[2]=convert(varchar(4),max(case 月 when 2 then 年 end) )  
 ,[3]=convert(varchar(4),max(case 月 when 3 then 年 end) )
        ,[4]=convert(varchar(4),max(case 月 when 4 then 年 end) )
 ,[5]=convert(varchar(4),max(case 月 when 5 then 年 end) )
 ,[6]=convert(varchar(4),max(case 月 when 6 then 年 end) )
        ,[7]=convert(varchar(4),max(case 月 when 7 then 年 end) )
 ,[8]=convert(varchar(4),max(case 月 when 8 then 年 end) )
 ,[9]=convert(varchar(4),max(case 月 when 9 then 年 end) )
        ,[10]=convert(varchar(4),max(case 月 when 10 then 年 end) )
 ,[11]=convert(varchar(4),max(case 月 when 11 then 年 end) )
 ,[12]=convert(varchar(4),max(case 月 when 12 then 年 end) )
        ,合计=convert(varchar,(select  top 1 b.年
             from(
             select 年=max(b.年),总降水=max(b.总降水)
             from #t a,#t b
             where a.总降水>=b.总降水  and a.年=b.年
             ) a inner join #t b on a.总降水=b.总降水))
from #t b

--删除测试表
drop table js ,#t,#t1,#t2

--运行结果:
 年/月         1         2           3          4     ..... 合计
1971          34.5    23.5     56      null  .....  113.5
1972           8.5      33        12      null  .....  53.5
平均           21.5    28.3     34.0   null  .....  83.75
最大值       34.5    33        56       null  .....  123.5
出现年份  1971    1972     1971 null ......  1971

 

关于ASP.NET中OnClientClick事件Eval函数解析错误的处理

在GridView中使用如下代码会出现解析错误: ?");' Text="delete" /> 可以使用另一种写法完成所要表达的意思: OnClientClick='' 在一个服...
  • Top_xin
  • Top_xin
  • 2016年06月12日 10:58
  • 431

如何编写一个高效的sql语句

一.    序言 数据库的性能问题,一直以来都是困扰各个事业部的大问题。在性能问题中SQL语句的编写又是重中之重。因此,为提高各个事业部相应产品的执行效率,提高软件的性能,实现从功能要求到性能要求的...
  • ylqiu1028
  • ylqiu1028
  • 2017年06月16日 08:38
  • 678

如何写sql的递归查询语句?

例子:cpcbid    cpcbbh          type  parentid  parentbh            cbze 70      2009120001      11    ...
  • caobingyi
  • caobingyi
  • 2010年01月21日 10:19
  • 1975

写高效的SQL语句

SQL优化总结 1,where的条件顺序影响查询速度 WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之...
  • reggergdsg
  • reggergdsg
  • 2017年02月19日 17:49
  • 622

Powerbuilder中常用SQL语句实例

任何对sql类数据库操作的语言必学的:),下面的是PB版本,有一些PB的特性.SQL语句sql语句以;结束,可写成多行形式而不用&1、SELECT注意:变量前加:一个例子:SELECT Employe...
  • xuejiayue1105
  • xuejiayue1105
  • 2007年11月07日 15:34
  • 1949

省市县三级联动的SQL语句

省市县三级联动的SQL语句 /****** Object: Table [dbo].[Bs_Area] Script Date: 09/10/2016 09:35:46 ******/ ...
  • lhwomg
  • lhwomg
  • 2016年11月08日 16:10
  • 2967

使用with语句来写一个稍微复杂sql语句(经典,转载)

偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊。看了一位博主的文章,自己添加了一些内容,做了简单的总结,这个语句还是第一次见到,学习了。我从简单到复杂地写,希望...
  • dxnn520
  • dxnn520
  • 2012年06月18日 11:09
  • 3510

一个非常好的ORACLE的分页SQL语句

 select * from (select my_table.*, rownum as my_rownum from ( select yhbh, yhmc from yysf_tb_yonghxx...
  • mxfhhh
  • mxfhhh
  • 2005年07月21日 08:52
  • 1409

SQL语句基础模板

一、对库的操作 创建一个数据库 create database 库名(character set 字符集名)  查看已创建数据库信息 show create database 库名 删除库 d...
  • JingbinChow
  • JingbinChow
  • 2017年08月07日 00:11
  • 248

mysql的语句分类,查询、子查询及连接查询

一、mysql查询的五种子句         where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数)       ...
  • LJFPHP
  • LJFPHP
  • 2017年06月03日 11:59
  • 351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何写这样的SQL语句?
举报原因:
原因补充:

(最多只允许输入30个字)