zoukankan      html  css  js  c++  java
  • ORACLE--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

    昔日我曾苍老,如今风华正茂(ง •̀_•́)ง
  • 相关阅读:
    bzoj 1017 魔兽地图DotR
    poj 1322 chocolate
    bzoj 1045 糖果传递
    poj 3067 japan
    timus 1109 Conference(二分图匹配)
    URAL 1205 By the Underground or by Foot?(SPFA)
    URAL 1242 Werewolf(DFS)
    timus 1033 Labyrinth(BFS)
    URAL 1208 Legendary Teams Contest(DFS)
    URAL 1930 Ivan's Car(BFS)
  • 原文地址:https://www.cnblogs.com/lgqrlchinese/p/11101786.html
Copyright © 2011-2022 走看看