上周处理过 Oracle、Sql Server 数据库相关数据,发现其实它们的 SQL 查询语句有些是不太一样的,比如行列转置和将查询结果插入新表。本人还是比较愿意写 SQL 语句的,互联网的技术日新月异,前端后端各种框架、新技术每搁几年就得更新一遍,根本学不过来,而 SQL 语句这些多却少有变化,值得好好学习。

此篇博客将会根据后续的工作持续更新。

一、Sql Server

1、查询表数据

select * from hzwater

2、截取字段

截取字段的前 6 位

select SUBSTRING(t.cbmonth,0,7) as cbmonths FROM hzwater as t

3、增加几列(行列倒置)

原表字段 mainid、user_name、user_addr、ysxz、cbmonth、biaodi、meter_no、pianqu

首先将 cbmonth 字段截取前 6 位改为 cbmonths 字段,然后再增加几行,增加几列其实是按月份增加几个字段,如需要增加 201601、201602、201603、201604、201605、201606、201607、201608、201609、201610......201812

使用 CASE......WHEN......语句实现:

select meter_no as meter_no,mainid as mainid,user_name as user_name,user_addr as user_addr,ysxz as ysxz,pianqu as pianqu,MAX(CASE cbmonths WHEN '201601' THEN cbsl ELSE 0 END) AS '201601',MAX(CASE cbmonths WHEN '201602' THEN cbsl ELSE 0 END) AS '201602',MAX(CASE cbmonths WHEN '201603' THEN cbsl ELSE 0 END) AS '201603',MAX(CASE cbmonths WHEN '201604' THEN cbsl ELSE 0 END) AS '201604',MAX(CASE cbmonths WHEN '201605' THEN cbsl ELSE 0 END) AS '201605',MAX(CASE cbmonths WHEN '201606' THEN cbsl ELSE 0 END) AS '201606',MAX(CASE cbmonths WHEN '201607' THEN cbsl ELSE 0 END) AS '201607'
from [hzwater_guotu].[dbo].middle
GROUP BY meter_no,mainid,user_name,user_addr,ysxz,pianqu
order by meter_no,user_name desc

注意:GROUP BY 后面的字段要跟前面 select 字段一样(除了 MAX(CASE...WHEN)里面的字段),否则容易出错;

得到的结果是:

4、将查询结果放入创建的新表

使用

select * into NewTablename from ...

如:

select * into middle from(select t.mainid,t.user_name,t.user_addr,t.ysxz,SUBSTRING(t.cbmonth,0,7)
as cbmonths,t.cbsl,t.biaodi,t.meter_no,t.pianqu from hzcbdata as t)b

二、Oracle

1、查询数据

select * from Temp

2、增加几列(行列倒置)

表里面原有字段为:用户类别、用户名称、用电地址、计费电量、DFNY

处理完之后表的字段为:用电类别、用户名称、用电地址、201701、201702、201703、201704、201705、201706、201708......201812

使用 decode 语句实现:

select * from (select 用电类别,用户名称,用电地址,sum (decode(dfny, '201701' , 计费电量, 0 )) "201701",sum (decode(dfny, '201702' , 计费电量, 0 )) "201702",sum (decode(dfny, '201703' , 计费电量, 0 )) "201703",sum (decode(dfny, '201704' , 计费电量, 0 )) "201704",sum (decode(dfny, '201705' , 计费电量, 0 )) "201705",sum (decode(dfny, '201706' , 计费电量, 0 )) "201706",sum (decode(dfny, '201707' , 计费电量, 0 )) "201707",sum (decode(dfny, '201708' , 计费电量, 0 )) "201708",sum (decode(dfny, '201709' , 计费电量, 0 )) "201709",sum (decode(dfny, '201710' , 计费电量, 0 )) "201710",sum (decode(dfny, '201711' , 计费电量, 0 )) "201711",sum (decode(dfny, '201712' , 计费电量, 0 )) "201712",sum (decode(dfny, '201801' , 计费电量, 0 )) "201801",sum (decode(dfny, '201802' , 计费电量, 0 )) "201802",sum (decode(dfny, '201803' , 计费电量, 0 )) "201803",sum (decode(dfny, '201804' , 计费电量, 0 )) "201804",sum (decode(dfny, '201805' , 计费电量, 0 )) "201805",sum (decode(dfny, '201806' , 计费电量, 0 )) "201806",sum (decode(dfny, '201807' , 计费电量, 0 )) "201807",sum (decode(dfny, '201808' , 计费电量, 0 )) "201808",sum (decode(dfny, '201809' , 计费电量, 0 )) "201809",sum (decode(dfny, '201810' , 计费电量, 0 )) "201810",sum (decode(dfny, '201811' , 计费电量, 0 )) "201811",sum (decode(dfny, '201812' , 计费电量, 0 )) "201812"
from TEMPDLT20191203 group by 用电类别,用户名称,用电地址)t

处理完之后的结果为:

3、将表转置并查询

select * from (select 用户名称,用电地址,sum (decode(dfny, '201701' , 计费电量, 0 )) "201701",sum (decode(dfny, '201702' , 计费电量, 0 )) "201702",sum (decode(dfny, '201703' , 计费电量, 0 )) "201703",sum (decode(dfny, '201704' , 计费电量, 0 )) "201704",sum (decode(dfny, '201705' , 计费电量, 0 )) "201705"
from TEMPDLT20191203 group by 用户名称,用电地址)t where t.用户名称='向阳';

4、将查询结果放入创建的新表

create table NewTablename as select * from b;

Oracle+Sql Server相关查询语句相关推荐

  1. sql server一个查询语句引发的死锁

    程序错误日志大量的报死锁错误,去数据库错误日志查看确实有很多死锁(应在数据库实例启动时执行dbcc traceon(1222,-1)开启死锁跟踪): 04/29/2016 14:07:51,spid3 ...

  2. SQL server 高级查询语句

    1.系统函数 函数名 描述 举例 convert() 数据类型转换 selece convert(varchar(5),12345) 返回:字符串12345 cast() 数据类型转换,与conver ...

  3. SQL Server经典查询语句练习题及答案

    注意:在插入数据的时候,需要将zahowei改成中文,原数据是中文的,因为最近这个词不能过审,只能用拼音代替了,可能是那个人出了啥事吧,审核不通过就挺莫名其妙的 现在有一教学管理系统,具体的关系模式如 ...

  4. SQL:简单查询语句操作实例

    一.SQL Server简单查询语句 背景知识: 一.查询:SQL中最基本.最常用的操作,用来对数据库进行查询 二.表达式: select 属性列 from 表 where 筛选条件 group by ...

  5. SQL Server 慢查询

    SQL Server 慢查询语句查询 1.前10条慢查询 SELECT TOP 10[session_id],[request_id],[start_time] AS '开始时间',[status] ...

  6. SQL Server中T-SQL语句查询使用的函数

    SQL Server中T-SQL语句查询使用的函数 一,字符串函数 字符串函数用于对字符串数据进行处理,并返回一个字符串或数字. 函数名 描述 举例 CHARINDEX 用来寻找一个指定的字符串在另一 ...

  7. SQL server 2008基本语句大全与提升语句

    SQL server 2008 常用语句 1.基础语句 2.sql语句提升 1.基础语句 ##1.创建数据库 CREATE DATABASE database-name on primary (nam ...

  8. SQL Server 2016 查询存储性能优化小结

    SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...

  9. oracle带时间查询语句,请教oracle按时间分组查询语句的写法

    请教oracle按时间分组查询语句的写法 最近由于要做报表,在一张表中有一个字段为date类型,现在想要在一段时间内(比如一年)能够按照时间段分组查询记录总和,比如我要能够查询2007年到2009年间 ...

最新文章

  1. 2021-2027年中国室内游艺设备行业研究及前瞻分析报告
  2. 某程序的bug是什么意思?
  3. 微信公众号手机无法直接下载APK文件是怎么回事
  4. JSP内置对象(request、session、application)
  5. Android App 优化之 ANR 详解
  6. BAT架构师进阶:大型网站架构书籍推荐
  7. java 字符串指定编码输出_java对字符的编码处理
  8. 无代码时代来临,程序员如何保住饭碗?赶紧看一看!
  9. idea debug的时候 启动起来超级慢
  10. [Python] 字典 vars()函数:以字典类型提取对象的属性和属性值
  11. 对Python的初认识以及期待
  12. 软件测试技术之如何编写测试用例
  13. CAD图纸转换成高质量的彩色PDF格式如何操作?
  14. 在Colaboratory中使用ImageAI训练自己的数据集
  15. electron 打开选择文件框
  16. Cartographer实时显示三维点云地图
  17. 开水团2023届实习笔试
  18. 无法唤起订阅消息弹窗 requestSubscribeMessage:fail can only be invoked by user TAP gesture
  19. 提问(小白问题):为什么这里调试的时候无法输入
  20. 高中数学怎么学好如何轻松学好高中数学

热门文章

  1. 400,404,500报错原因
  2. QT笔记——临时的悬浮窗口
  3. 【picoCTF2022】Misc部分
  4. rem、em、px、rpx、vw、vh、%等
  5. tf.Variable
  6. 逻辑回归中的梯度下降法
  7. 软件测试方法—动态测试
  8. 【C语言】—— qsort()函数的使用
  9. 编写一个截取字符串的函数
  10. 程序编写——四步制作漫画线稿出书