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

  1.ORACLE列变行加合计:

查询结果为

 

 


 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.自定义查询结构,场景如下:

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

查询结果为:

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

 1 SELECT
 2     TMP1.COURSE AS COURSE,
 3     NVL ( TMP2.SCORE, 0 ) AS SCORE 
 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 AS COURSE,
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

转载于:https://www.cnblogs.com/lgqrlchinese/p/11101786.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值