oracle sql 两张表条件查询且分组

oracle sql 两张表条件查询且分组,第1张

select axiaoqu ,adanjia from esf a, esfjj  b where axiaoqu = b xiaoqu and adanjia > 095bjunjia group by axiaoqu,adanjia

CREATE  TABLE  info (

    users    varchar(100)

);

INSERT INTO info VALUES('userA@userB@userC');

INSERT INTO info VALUES('userB@userC@userD');

INSERT INTO info VALUES('userC@userD@userE');

COLUMN "用户" FORMAT A15

SELECT

  to_char(strvalue) as "用户",

  count() AS "用户数"

FROM

  info,

  table(fn_split( infousers,  '@'))

GROUP BY

  to_char(strvalue)

ORDER BY

  1;

用户                用户数

--------------- ----------

userA                    1

userB                    2

userC                    3

userD                    2

userE                    1

上面这样的效果, 是否满足你的需求?

如果满足的话, 你再往下看, 下面是 存储过程的相关代码

Oracle 需要首先在数据库中, 创建好 类型 与 函数。

来实现一个  split 功能的处理。

-- 定义一个对象类型

CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000));

/

-- 定义一个 表/数组类型, 内容是前面定义的那个对象

CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split;

/

--------------------

-- 字符分割函数

-- 参数1:  被分割的源字符串

-- 参数2:  用于拆分的字符串。

--------------------

CREATE OR REPLACE FUNCTION fn_split(

  p_str       IN VARCHAR2,

  p_delimiter IN VARCHAR2)

RETURN ty_tbl_str_split IS

  j         INT := 0;

  i         INT := 1;

  -- 被分割的源字符串 的长度

  len       INT := 0;

  -- 分隔字符串的长度

  len1      INT := 0;

  -- 暂存的中间每一个单元的文本信息

  str       VARCHAR2(4000);

  -- 预期返回结果

  str_split ty_tbl_str_split := ty_tbl_str_split();

BEGIN

  -- 被分割的源字符串 的长度

  len   := LENGTH(p_str);

  -- 分隔字符串的长度

  len1 := LENGTH(p_delimiter);

  -- 遍历 被分割的源字符串

  WHILE j < len LOOP

    -- 在被分割的源字符串中, 查询 分隔字符串

    j := INSTR(p_str, p_delimiter, i);

    IF j = 0 THEN

      -- j=0 意味着没有找到

  -- 可以理解为是查询到最后一个单元了

  -- 设置 j := len, 让外部的循环处理可以结束了

      j  := len;

      -- 获取最后一个单元的内容

      str := SUBSTR(p_str, i);

      -- 结果追加一行

      str_splitEXTEND;

      -- 设置结果内容

      str_split(str_splitCOUNT) := ty_row_str_split(strValue => str);

      IF i >= len THEN

        EXIT;

      END IF;

    ELSE

      -- 如果在被分割的源字符串中,找到了 分隔字符串

      -- 首先,获取分割的内容

      str := SUBSTR(p_str, i, j - i);

      -- 然后设置索引, 下一次再查找的时候,从指定的索引位置开始(不是从0开始找了)

      i := j + len1;

      -- 结果追加一行

      str_splitEXTEND;

      -- 设置结果内容

      str_split(str_splitCOUNT) := ty_row_str_split(strValue => str);

    END IF;

  END LOOP;

  RETURN str_split;

END fn_split;

/

函数创建完毕以后,可以开始做查询的处理

SQL> select to_char(strvalue) as Value from table(fn_split('aa,bb,cc',','));

VALUE

-------------------------------------------------------------------------------

aa

bb

cc

表名test

字段 type_id counts

1 2

1 3

2 2

2 8

select type_id,sum(counts) from test group by type_id;

结果

type_id counts

1 5

2 10

-------------补充-----------------

a表:

type_id name

1 服装

2 首饰

b表:

id type_id counts

1 1 4

2 2 5

3 1 8

4 2 2

select btype_id,sum(counts) from a,b where atype_id=btype_id

group by btype_id;

结果:

type_id counts

1 12

2 7

以上就是关于oracle sql 两张表条件查询且分组全部的内容,包括:oracle sql 两张表条件查询且分组、Oracle如何对一个多值字段进行分组统计、!oracle中分组求各列的和并条件查询,这样的sql怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10162741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存