ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)

摘要:
1.ORACLE列变行加合计:查询结果为1SELECT2nvlF,3sumS1,4sumS2,5sumS36FROM716GROUPBY17rollup2.自定义查询结构,场景如下:查询语文,数学,英语,科学四门学科的分数,但是表里只有数学和英语。

1.ORACLE列变行加合计:

ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)第1张

查询结果为

ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)第2张

1 SELECT
2     nvl( F, '合计') F,
3     sum( S1 ) S1,
4     sum( S2 ) S2,
5     sum( S3 ) S3
6 FROM
7     (SELECT
8 F,
9     sum( decode( S, 'S1', N, NULL) ) S1,
10        sum( decode( S, 'S2', N, NULL) ) S2,
11        sum( decode( S, 'S3', N, NULL) ) S3    
12 FROM
13 LQG_TEST    
14 GROUP BY
15 F)
16 GROUP BY
17 rollup (
18     F)

2.自定义查询结构,场景如下:

查询语文,数学,英语,科学四门学科的分数,但是表里只有数学和英语。如图:

ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)第3张

查询结果为:

ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)第4张

看看SQL吧(nvl函数用于oracle):

1 SELECT
2     TMP1.COURSE ASCOURSE,
3     NVL ( TMP2.SCORE, 0 ) ASSCORE 
4 FROM
5 (
6     SELECT
7         '语文'COURSE 
8     FROM
9     DUAL UNION ALL
10     SELECT
11         '数学'COURSE 
12     FROM
13     DUAL UNION ALL
14     SELECT
15         '英语'COURSE 
16     FROM
17     DUAL UNION ALL
18     SELECT
19         '科学'COURSE 
20     FROM
21 DUAL 
22 ) TMP1
23     LEFT JOIN(
24     SELECT
25     CASE
26             
27         WHEN
28             COURSE = 'CHINESE' THEN
29                 '语文' 
30                 WHEN COURSE = 'MATH' THEN
31                 '数学' 
32                 WHEN COURSE = 'ENGLISH' THEN
33                 '英语' 
34                 WHEN COURSE = 'SCIENCE' THEN
35                 '科学' 
36             END ASCOURSE,
37 SCORE 
38         FROM
39 LGQ_TEST 
40     ) TMP2 ON TMP1.COURSE = TMP2.COURSE

3.将字符串按某字符分割为多条记录

1 SELECT
2     REGEXP_SUBSTR( '赵-钱-孙-李', '[^-]+', 1, ROWNUM ) 
3 FROM
4     dual CONNECT BY ROWNUM <= LENGTH( '赵-钱-孙-李' ) -LENGTH(
5     regexp_replace( '赵-钱-孙-李', '-', '' )) + 1

ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)第5张

免责声明:文章转载自《ORACLE--SQL日常问题和技巧1(列变行、自定义查询结构、将字符串分割为多条记录)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇你真的会使用assert吗?AppScan下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL中的数字格式化 (收藏)

用sql语句来格式化double型的数据,比如,只取出小数点后面的两位一。主要方法--取小数位前数字,不考虑四舍五入select left('30000.72234', charindex('.', '30000.72234')-1)其中:charindex('.', '30000.72234')获得小数点的位置;-1则表示在小数点前面的全部,如果想获取小...

多表连接查询

连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。 基本语法: from 表1  [连接方式]  join 表2  [on 连接条件]; 原始数据:     1、交叉连接 两个表基本连接,完全两两交叉连接,没有实际意义 from 表1 [cross] join 表2 ; //可见交叉连接只是没有on条件而已。cross可省略 SE...

sql select 如何定义自增列?

今天在项目中遇到一个问题,想在存储过程中将查询出来的数据放到一个临时表中,不想create table(这人懒 ),但是临时表中需要用到一个自增列,怎么办呢?只好想办法啦 结果如下: drop table #tempSELECT id = IDENTITY(int,1,1),* INTO #TEMP FROM myTable select * from #...

Mysql数据优化--DBA梳理珍藏篇

1. 优化SQL1)     通过show status了解各种sql的执行频率         show status like 'Com_%'        了解 Com_select,Com_insert 的执行次数 2)    通过Explain分析低效的sql语句 3)    建立合适的索引 4)    通过show status like '...

数据库基本概念及简单的单表操作

一:MySQL的基本介绍:MySQL是一种关系型数据库mysql是属于Oracle旗下的一款数据库产品。分为商业版和社区版 技术角度分析:MySQL数据库是一种C/S(客户端/服务器)模型的服务     B/S(浏览器/服务器)MySQL的网络通信模型为:NIO+连接池来实现,支持高并发的应用场景   SQL: Structred Query Langu...

SqlServer动态执行SQL语句sp_executesql、Exec

sp_executesql语法 sp_executesql[@stmt=]stmt[{,[@params=]N'@parameter_name data_type[,...n]'}{,[@param1=]'value1'[,...n] }] 参数 [@stmt=]stmt 包含 Transact-SQL 语句或批处理的 Unicode 字符串,stmt必...