精华内容
下载资源
问答
  • ,SUM(JAN) AS COL3 ,MEDID AS COL4 from detail GROUP BY MEDID,MEDNAME UNION SELECT B.UNITID AS COL1 ,CAST(A.JAN AS VARCHAR2(20)) AS COL2 ,NULL AS COL3 ,A.MEDID AS COL4 FROM DETAIL A ...
    问题:
    
    create table main(id varchar2(20),yearly varchar2(4),unitid varchar2(20));
    alter table main add constraint pk_main primary key (id) ;

    insert into MAIN (ID, YEARLY, UNITID)
    values ('1', '2007', '101');
    insert into MAIN (ID, YEARLY, UNITID)
    values ('2', '2007', '102');
    insert into MAIN (ID, YEARLY, UNITID)
    values ('3', '2007', '103');
    insert into MAIN (ID, YEARLY, UNITID)
    values ('4', '2007', '105');
    commit;

    create table detail(id varchar2(20),medid varchar2(10),medname varchar2(20),jan number,
    feb number,mar number,apr number,may number,jun number,jul number,aug number,sep number,oct number,nov number,dec number);
    alter table detail add constraint pk_detail primary key (id,medid) ;

    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('1', '001', '止痛片', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('1', '002', '感冒灵', 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('2', '001', '止痛片', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('2', '002', '感冒灵', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('2', '003', '伤风胶囊', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('3', '002', '感冒灵', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('3', '001', '止痛片', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('3', '004', '克咳胶囊', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
    insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
    values ('4', '004', '克咳胶囊', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
    commit;

    我要的结果是这样的,如想要第一个月的统计数

    001 止痛片 3
    101 1
    102 1
    103 1
    002 感冒灵 4
    101 2
    102 1
    103 1
    003 伤风胶囊 1
    102 1
    004 克咳胶囊 2
    103 1
    105 1

    结果:
    SELECT COL1,COL2,COL3 FROM
    (
    select
        MEDID AS COL1
        ,MEDNAME AS COL2
        ,SUM(JAN) AS COL3
        ,MEDID AS COL4
    from detail
    GROUP BY MEDID,MEDNAME

    UNION

    SELECT
        B.UNITID AS COL1
        ,CAST(A.JAN AS VARCHAR2(20)) AS COL2
        ,NULL AS COL3
        ,A.MEDID AS COL4
    FROM DETAIL A
    LEFT JOIN MAIN B ON A.ID=B.ID
    ORDER BY COL4 ,COL1
    展开全文
  • oracle 数据库 sum count null 结果

    千次阅读 2011-04-07 15:23:00
    select sum(aa),sum(bb),count(bb),count(*),sum(aa+bb),sum(aa)+sum(bb) from (select 1 aa,null bb from dual union all select 2 aa,1 bb from dual) tt 结果为:  SUM(AA)SUM(BB)COUNT...

    select sum(aa),sum(bb),count(bb),count(*),sum(aa+bb),sum(aa)+sum(bb) from

    (select 1 aa,null bb from dual union all select 2 aa,1 bb from dual) tt

    结果为:

     

    SUM(AA)SUM(BB)COUNT(BB)COUNT(*)SUM(AA+BB)SUM(AA)+SUM(BB)
    311234
    展开全文
  • select airline, sum(saleprice) as saleprice, sum(airporttax) as airporttax, ...我想通过union新增一行合计,然后在新增一列,得到union上面的一个字段与下面对应字段的一个比值,用百分比显示
  • 两者都是记录集操作,把来自许多SELECT语句的结果组合到一个结果集合中。不过值得注意的一点是,类型的一致性,既要满足,列于每个SELECT语句的对应位置的被选择的列应具有相同的类型。(例如,被第一个语句选择的...
    1.Oracle中UNION 与UNION ALL的学习
    
    两者都是对记录集操作,把来自许多SELECT语句的结果组合到一个结果集合中。不过值得注意的一点是,类型的一致性,既要满足,列于每个SELECT语句的对应位置的被选择的列应具有相同的类型。(例如,被第一个语句选择的第一列应和被其它语句选择的第一列具有相同的类型。)
    UNION语法结构:
    SELECT ...
    UNION [ALL]
    SELECT ...
    [UNION [ALL]
    SELECT ...


    UNION 与 UNION ALL 的区别:
    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。但是,如果表数据量大,就可能导致用磁盘进行排序。
    UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

    从效率上说,UNION ALL要比UNION快很多,重要的一点就是不需要排序。在考虑两
    者如何使用更适合某一种场景,就要从做UNION的两张表上考虑了,如果不会出现
    重复数据,就优先考虑UNION ALL。

    2.Oracle中函数DECODE
    一个条件判断函数,可以进行多值判断。功能这个真的很黄很暴力。
    decode的语法结构如下:
    decode (expression, search_1, result_1)
    decode (expression, search_1, result_1, search_2, result_2)
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)
    decode (expression, search_1, result_1, default)
    decode (expression, search_1, result_1, search_2, result_2, default)
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)


    从上面的,可以很直观看出decode函数所需要填充的值,也很容易令人一看就懂decode的使用。
    decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
    可以用伪代码描述一下:
    IF expression = search_1 THEN
    RETURN result_1
    IF expression = search_2 THEN
    RETURN result_2
    ELSE
    RETURN default


    使用方法:
    1、比较大小
    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
    例如:
    变量1=10,变量2=20
    则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

    2、表、视图结构转化
    现有一个商品销售表sale,表结构为:
    month    char(6)      --月份
    sell    number(10,2)   --月销售金额
    现有数据为:
    200001  1000
    200002  1100
    200003  1200
    200004  1300
    200005  1400
    200006  1500
    200007  1600
    200101  1100
    200202  1200
    200301  1300
    想要转化为以下结构的数据:
    year   char(4)      --年份
    month1  number(10,2)   --1月销售金额
    month2  number(10,2)   --2月销售金额
    month3  number(10,2)   --3月销售金额
    month4  number(10,2)   --4月销售金额
    month5  number(10,2)   --5月销售金额
    month6  number(10,2)   --6月销售金额
    month7  number(10,2)   --7月销售金额
    month8  number(10,2)   --8月销售金额
    month9  number(10,2)   --9月销售金额
    month10  number(10,2)   --10月销售金额
    month11  number(10,2)   --11月销售金额
    month12  number(10,2)   --12月销售金额
    结构转化的SQL语句为:
    create or replace view v_sale(
    year,month1,month2,month3,month4,
    month5,month6,month7,month8,month9,
    month10,month11,month12)
    as
    select substrb(month,1,4),
    sum(decode(substrb(month,5,2),'01',sell,0)),
    sum(decode(substrb(month,5,2),'02',sell,0)),
    sum(decode(substrb(month,5,2),'03',sell,0)),
    sum(decode(substrb(month,5,2),'04',sell,0)),
    展开全文
  • NVL(SUM(a), b) 与 SUM(NVL(a, b)) 的区别

    NVL(SUM(a), b) 与 SUM(NVL(a, b)) 的区别

    构造一张测试表

    SQL> WITH TEMP AS
      2   (SELECT 1 RN, 'SZ' PLANT, '20190321' DATESTR, 459 TOTAL
      3      FROM DUAL
      4    UNION ALL
      5    SELECT 2, 'CD', '20190321', 100
      6      FROM DUAL
      7    UNION ALL
      8    SELECT 3, 'SZ', '20190321', NULL
      9      FROM DUAL)
     10  SELECT T.* FROM TEMP T;
             RN PLANT DATESTR       TOTAL
    ---------- ----- -------- ----------
             1 SZ    20190321        459
             2 CD    20190321        100
             3 SZ    20190321 

    1、NULL值和数字同时存在的情况

    • NVL(SUM(a), b)
    SELECT NVL(SUM(T.TOTAL), 0) FROM TEMP T;
    NVL(SUM(T.TOTAL),0)
    -------------------
                    559
    • SUM(NVL(a, b))
    SELECT SUM(NVL(T.TOTAL, 0)) FROM TEMP T;
    SUM(NVL(T.TOTAL,0))
    -------------------
                    559

    2、全为NULL值

    • SUM(a)
    SELECT SUM(T.TOTAL) FROM TEMP T WHERE T.RN = 3;
    SUM(T.TOTAL)
    ------------
    
    • NVL(SUM(a), b)
    SELECT NVL(SUM(T.TOTAL), 0) FROM TEMP T WHERE T.RN = 3;
    NVL(SUM(T.TOTAL),0)
    ------------------
                      0
    
    • SUM(NVL(a, b))
    
    SELECT SUM(NVL(T.TOTAL, 0)) FROM TEMP T WHERE T.RN = 3;
    SUM(NVL(T.TOTAL,0))
    --------------------
                      0

    3、当记录不存在时

    • SUM(a)
    SELECT SUM(T.TOTAL) FROM TEMP T WHERE T.RN = 4;
    SUM(T.TOTAL)
    ------------
    
    • NVL(SUM(a), b)
    SELECT NVL(SUM(T.TOTAL), 0) FROM TEMP T WHERE T.RN = 4;
    NVL(SUM(T.TOTAL),0)
    -------------------
                      0
    
    • SUM(NVL(a, b))
    SELECT SUM(NVL(T.TOTAL, 0)) FROM TEMP T WHERE T.RN = 4;
    SUM(NVL(T.TOTAL,0))
    -------------------
    

    总结

    • SUM 求和时自动跳过所有 NULL 值(NULL 值没有-参加运算, 而不是被当做 0 );

    • SUM(NVL(a, b)) 求和时,列中的 NULL 值被当做 b 来运算(上例中当做 0 运算);

      • 记录不存在时。即 a 不存在时,整个 SUM(NVL(a, b)) 为 NULL, 而不是为 b;
    • NVL(SUM(a), b),先进行求和运算,如果为 NULL 值则令其为 b;

      • 记录不存在时。即 a 不存在时,SUM(a) 为 NULL, 但 NVL(SUM(a), b) 的结果为 b;

    • NULL 值与任何数进行基本运算的结果都为 NULL;
    • 基本运算会自动舍弃 NULL 值(这一点可以通过 AVG 函数来进一步验证:有 NULL 值存在时, AVG(a) 与 AVG(NVL(a, 0)) 的结果是不一样的)

    • 一般情况下,建议使用 NVL(SUM(a, b)) 的这种写法。
    • 如果有特别严格的需求,甚至可以使用 NVL(SUM(NVL(a, b)), b) 这种写法来双重保险。
    展开全文
  •  ...-- Intersect,两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序; -- Minus,两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。   可以在最后一个结果
  • Group by的含义是对结果进行分组。结合具体的例子来说好了,比如要计算工资的平均值,我们可以对每个部门进行分别求平均值,这样就能看出研发部门和销售部门待遇的差距了,呵呵! 要按部门求得平
  • oracle分析函数sum求逐行递减

    千次阅读 2015-05-07 22:10:31
    分析:我们可以用oracle的分析函数sum()来解决这个问题,通过换钱的时间升序,然后用总的金额减去前面总共还了多少,得到每次还了还欠的钱。With tmp As ( Select to_date('20140228','yyyymmdd') a,1000 b
  • 文章目录1 概述2 示例3 扩展3.1 最大值和最小值 1 概述 1. 需求简述:每列 '追加' 所有前列的值 column => new column v1 v1 v2 v1 + v2 v3 v1 + v2 + v3 ...... vn v1 + v2 + v3 + ...... sum(列1) over(orde
  • ORACLE进阶(十二)union(all)学习

    千次阅读 2018-03-04 14:30:50
    ORACLE进阶(十二)union(all)学习       在工作中,查看到类似于如下的SQL语句: select sum(count) from (select count(1) count from casjugsum ...
  • oracle sum为null时做法

    千次阅读 2011-01-19 10:34:51
    select nvl(sum(area),0)area       以下部分为转载     本文发表于《软件报》2009年29期2009-07-20 第17版 属于本期推荐的文章之一 文章的难度不高,但是很有“科普”意义,有助于大家NULL的认识。 ...
  • 先看oracle怎么实现的 select deptno,ename,sal,sum(sal) over(order by ename) from emp; --姓名排序连续求和 ...
  • oracle:sql添加合计语句(union

    千次阅读 2019-05-20 10:54:19
    原表见下图: 查询全部的语句: SELECT * from BD_MARK_WHEIGHT_EQUIPMENT 添加合计: SELECT * from BD_MARK_...SELECT '','合计','','','',to_char(sum(PLUS)),to_char(sum(REDUCE)),'',sum(plus) from BD_MAR...
  • 组函数不计算null值   SELECT SUM(a) FROM ( SELECT 1 a FROM dual UNION ... SELECT 2 a FROM dual ... UNION ... 结果是6         SELECT SUM(a) FROM ( SELECT 1 a FROM dual ...
  • 本文是关于在Oracle数据库中,实现用视图展示多表数据集合的方法。 具体如下所示: 实现过程 创建一个package,包中定义两个方法,一个set值的方法,一个get值的方法 创建package body,实现package中的两个方法...
  • ORACLE触发器详解

    万次阅读 多人点赞 2012-09-27 10:00:56
    本文原文做了格式和目录调整方便阅读。文章总结的很全面,感谢原作的辛勤付出!!! 原文链接:http://www.cnblogs.com/huyong/archive/2011/04/27/2030466.html#!comments -----------------------------------...
  • Oracle结果合计的实现,主要应用于日期结果的集计,下面是具体的实现代码。 With AA as ( select 'A' tNo , 10 B from dual union select 'B' , 20 from dual union select 'A' , 30 from dual ) select tNo ,...
  • select prod.amount,prod.plansum,(prod.plansum-prod.amount) as borrow,d.enum_value from ----结果集相减(select t.Quo_Prod_List_Price * t.QUO_PROD_VOLUME as amount ,----列值相乘t.quo_prod_plan_cost * t....
  • Oracle三种去重的方法 distinct group by rowid 分组函数:作用于一组数据,并一组数据返回一个值 常见的分组函数有: count 返回找到的记录数 min 返回一个数字列或计算列的最小值 max 返回一个数字列或计算列...
  • 前言:我们很多情况下,在做报表的时候会统计的各种数量,本文主要探讨Oracle数据库在统计数量方法上使用Union All、With as、RollUp()三者之间的对比差异。 假如一条sql(查询不同类型的订单的数量和所占的比例)...
  • 前面我们在介绍oracle的聚合函数时提到如果在给定的值中存在空值的话,oracle将会忽略掉这些空值。这个处理的方式在大多数时候是符合我们要求的,但是在有些时候可能会有问题。例如,现在到了年关,公司会部分员工...
  • 废话少说,看下面的例子:  1.sum(column) over(partition by column order by column) 2.ratio_to_report(column) over(partition by column order by column)
  • oracle 将多个查询结果合并

    万次阅读 2018-09-07 09:41:00
    首先要区分一个概况,多个查询结果分两种,一种是一条sql查询多个结果,还有一种是多条sql语句查询出多个结果。  先看第一个,一条语句查询出多个结果,将多个结果合并成一条记录:  在oracle中有一个wm_concat...
  • 1.1. ORACLE去重函数distinct 表1: 表2: eg: select distinct name from A` 执行结果: select distinct name, id from A 执行结果: 2.||符号是字符串拼接 比如: ‘abc’ || ‘def’ 结果为:‘abcdef’ 3...
  • Select province, '1' kind, sum(income), sum(Expenses) from BusiStatRpt rpt where not exists (select * from CityConfig cfg where cfg.province = rpt.province and cfg.city = rpt.city and cfg....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,420
精华内容 10,168
关键字:

oracle对union结果sum