sql - 拆分单词并将其插入新表并计算这些单词

标签 sql plsql group-by split oracle11g

我有傻瓜表和数据。 我需要: 1-将每行中的每个句子拆分为新行 2-基于soundex函数根据句子的最后部分统计每行中的单词

create table a (id number(9), words varchar(500));
insert into a values(1,'UK,LONDON,YEMEN,JOHN,CAIRO,OMAR ALI,EGYPT,Cairo,YEMAN,OMAR AMR ALI,LONDAN');
insert into a values(2,'UK,SUDAI,SUDAIN,AYHAM SHAHER YAFOOZ,ALI YAFOOZ');
insert into a values(3,'MALAYSIA, AHMED ALI,MALYSIAN');

扩展输出

创建表 temp_words(id number(9),words varchar2(100), count_words number(9));

id            words                count_words
1              UK                     1
1            LONDON                   2
1            YEMEN                    2
1            CAIRO                    2
1            OMAR ALI                 2
1             JOHN                    1
2              UK                     1
2              SUDAI                  2
2          AYHAM SHAHER YAFOOZ        2
3               MALAYSIA              2
3              AHMED ALI              1

问候

最佳答案

要根据需要拆分数据,您可以使用“连接依据”作为行生成器。

SQL> with src as (select id,',' || words || ',' as words,
  2                      length(words) - length(translate(words, '.,', '.')) + 1 no_of_words
  3                 from a)
  4  select a.id,
  5         substr(a.words,
  6                instr(words, ',', 1, r) + 1,
  7                instr(words, ',', 1, r + 1) - instr(words, ',', 1, r) - 1) word,
  8         a.no_of_words
  9    from (select level r
 10            from dual
 11          connect by level <= (select max(no_of_words) from src)) d
 12         inner join src a
 13                on d.r <= a.no_of_words
 14   where a.no_of_words is not null
 15   order by a.id, d.r
 16  /

        ID WORD                 NO_OF_WORDS
---------- -------------------- -----------
         1 UK                            11
         1 LONDON                        11
         1 YEMEN                         11
         1 JOHN                          11
         1 CAIRO                         11
         1 OMAR ALI                      11
         1 EGYPT                         11
         1 Cairo                         11
         1 YEMAN                         11
         1 OMAR AMR ALI                  11
         1 LONDAN                        11
         2 UK                             5
         2 SUDAI                          5
         2 SUDAIN                         5
         2 AYHAM SHAHER YAFOOZ            5
         2 ALI YAFOOZ                     5
         3 MALAYSIA                       3
         3  AHMED ALI                     3
         3 MALYSIAN                       3

19 rows selected.

SQL>

关于sql - 拆分单词并将其插入新表并计算这些单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13800764/

相关文章:

mysql - SQL中的IF有些奇怪

sql - Oracle 中的异常处理

sql - 使用子查询提高 UPDATE 查询的性能

oracle - FOR UPDATE 语句的使用

oracle - 函数返回表正在创建公共(public)变量

sql - PL/SQL——在哪里更新,在哪里回滚

python - Pandas:迭代并插入具有组内条件的列复杂问题

sql - 千位分隔符 Oracle

MySQL 如何在任何 15 分钟的窗口中总结过多的交易量?

sql - GROUP BY 一个字段,保留其他字段