gpt4 book ai didi

sql - 基于搜索字符串的列的透视值

转载 作者:行者123 更新时间:2023-12-02 02:25:00 25 4
gpt4 key购买 nike

注意:我想在单个 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||'~', '~', 1, 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 < your_max_items”来调整搜索字符串中的最大项目数。

关于sql - 基于搜索字符串的列的透视值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com