编写一个sql语句,把b列中的数据用逗号分隔开,变成很多?谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个sql语句,把b列中的数据用逗号分隔开,变成很多?谢谢相关的知识,希望对你有一定的参考价值。

这个我做过,拆分逗号分隔符变列
select a,
t.ca,
c.lv,instr(t.ca, ',', 1, c.lv) + 1,
substr(t.ca,
instr(t.ca, ',', 1, c.lv) + 1,
instr(t.ca, ',', 1, c.lv + 1) -
(instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select a,
',' || b || ',' AS ca,
b,
LENGTH(b),
length(b || ','),
REPLACE(b, ','),
length(REPLACE(b, ',')), --删除逗号的长度
nvl(length(REPLACE(b, ',')), 0), --空值长度为空,因此要将空值替换为0
length(b || ',') - nvl(length(REPLACE(b, ',')), 0) AS cnt --以逗号分隔的字符串个数,先在原来的长度上加1 计算去除所有逗号后字符串长度,再,拿这个
FROM TEST_A) t,
   (select LEVEL lv from dual CONNECT BY LEVEL <= 100) c
where c.lv <= t.cnt --逗号数量在100以内
参考技术A select to_char(listagg(B, ', ') within group(order by B))
from (select 1 as B
from dual
union
select 2 AS B
from dual
union
select 3 AS B from dual)
参考技术B 你有没有想过,变成很多之后放在哪里?追问

还放在数据库中的表里面。

追答

百度一下oracle split函数,有很多写好的.

ps:每个逗号分开一列?你知道有多少列?

SQL中逗号分隔的查询结果转换成单个字符串放到in语句里

查询的结果转换成单个字符串放到in语句里

现查询语句:select student from xxhd where school in (select school from school)
主要问题是select school from school查询出来的结果是第一中学,第二中学,第三中学...都在一行里,需要把第一中学,第二中学,第三中学转换为'第一中学','第二中学','第三中学',以便实现
select student from xxhd where school in ('第一中学','第二中学','第三中学')这样的查询结果,当然,不能写成固定值,只能把select school from school查询后的结果进行转换
谢谢大家!最好用SQL语句,不用函数。

参考技术A select student from xxhd a, school b where patindex('%' || a.school || '%',b.school)>0追问

大侠,显示有语法错误,是哪里问题!

追答

忘记问你了,你这是什么数据库,|| 是oracle字符串链接的符号。。。
sql server是+

追问

谢谢,语句可以执行了,就是查询不到数据

追答

要不用CHARINDEX()
select student from xxhd a, school b where CHARINDEX(a.school,b.school)>0

追问

第二条语句,也没有返回结果,空的

本回答被提问者采纳
参考技术B select student from xxhd where CHARINDEX(school,(select school from school))>0

以上是关于编写一个sql语句,把b列中的数据用逗号分隔开,变成很多?谢谢的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL查询回显列之间用逗号分隔开怎么操作?

SQL语句,字段表里某列数据变为用逗号分隔的字符串

Oracle SQL:为列中的每个值创建一个新行,其中更多值用逗号分隔

SQL:将行与列中的逗号分隔值合并

SQL查询以从逗号分隔的列中检索值[重复]

如何将表中列中的逗号分隔值放入 SQL IN 运算符?