微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列的枢轴值基于搜索字符串

如何解决列的枢轴值基于搜索字符串

| 注意:我想在一个sql语句中执行此操作。不是pl / sql,游标循环等。 我有看起来像这样的数据:
ID    String
--    ------
01    2~3~1~4
02    0~3~4~6
03    1~4~5~1
我想提供一个报告,该报告以某种方式将String列的值转换为不同的行,例如:
Value    \"Total number in table\"
-----    -----------------------
1        3
2        1
3        2
4        3
5        1
6        1
我该怎么做呢?它就像一个数据透视表,但是我试图将数据透视表中的列,而不是透视表中的列。 注意,在实际应用中,我实际上并不知道String列的值是什么。我只知道值之间的分隔是\'〜\'     

解决方法

        给定此测试数据:
CREATE TABLE tt (ID INTEGER,VALUE VARCHAR2(100));
INSERT INTO tt VALUES (1,\'2~3~1~4\');
INSERT INTO tt VALUES (2,\'0~3~4~6\');
INSERT INTO tt VALUES (3,\'1~4~5~1\');
该查询:
SELECT VALUE,COUNT(*) \"Total number in table\"
  FROM (SELECT tt.ID,SUBSTR(qq.value,sp,ep-sp) VALUE
          FROM (SELECT id,value,INSTR(\'~\'||value,\'~\',1,L) sp  -- 1st posn of substr at this level,INSTR(value||\'~\',L) ep  -- posn of delimiter at this level
                  FROM tt JOIN (SELECT LEVEL L FROM dual CONNECT BY LEVEL < 20) q -- 20 is max #substrings
                            ON LENGTH(value)-LENGTH(REPLACE(value,\'~\'))+1 >= L 
               ) qq JOIN tt on qq.id = tt.id)
 GROUP BY VALUE
 ORDER BY VALUE;
结果是:
VALUE      Total number in table
---------- ---------------------
0                              1
1                              3
2                              1
3                              2
4                              3
5                              1
6                              1

7 rows selected

SQL> 
您可以通过将\“ LEVEL <20 \”调整为\“ LEVEL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。