SQL查询

表中有一条数据,包含姓名和爱好两个字段,爱好有多个并且是以逗号分隔的字符串,如何在做select查询的时候查询结果为一个姓名对应一个爱好。

数据库:SQLserver

SQL 黄色小鸡 发布于 2024-3-12 13:07 (编辑于 2024-3-12 13:51)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
1
LazySheepLv7高级互助
发布于2024-3-12 13:12(编辑于 2024-3-12 14:07)

image.png

SELECT  name,  value AS activity FROM activities CROSS APPLY STRING_SPLIT(activity, ',');

最佳回答
0
CD20160914Lv8专家互助
发布于2024-3-12 13:11

你是什么数据库?

最佳回答
0
CovidLv3高级互助
发布于2024-3-12 13:12

SqlServer参考

if object_id('tb') is not null drop table tb 

go 

create table tb([编号] varchar(3),[产品] varchar(2),[数量] int,[单价] int,[金额] int,[序列号] varchar(8)) 

insert into tb([编号],[产品],[数量],[单价],[金额],[序列号]) 

select '001','AA',3,5,15,'12,13,14' union all

select '002','BB',8,9,13,'22,23,24'

go 

select [编号],[产品],[数量],[单价],[金额] 

,substring([序列号],b.number,charindex(',',[序列号]+',',b.number)-b.number) as [序列号] 

from tb a with(nolock),master..spt_values b with(nolock) 

where b.number>=1 and b.number<len(a.[序列号]) and b.type='P'

and substring(','+[序列号],number,1)=','

go 

drop table tb 

go 

/** 

编号   产品   数量          单价          金额          序列号 

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

 AA   3           5           15          12 

 AA   3           5           15          13 

 AA   3           5           15          14 

 BB   8           9           13          22 

 BB   8           9           13          23 

 BB   8           9           13          24 

*/ 

---------- 

  

最佳回答
0
每天都得学一点Lv3见习互助
发布于2024-3-12 13:13(编辑于 2024-3-12 13:17)

SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符

SELECT SUBSTRING('成都融资事业部',3)

结果:融资事业部

用这个就行

substring_index('www.baidu.com', '.', 2) 截取第二个 '.' 之前的所有字符  MYSQL

最佳回答
0
华莉星宸Lv7高级互助
发布于2024-3-12 13:16

Oracle写法:

WITH 

    split_string AS (

        SELECT '张三' as sname,'a,b,c,d,e,f' AS string FROM dual

        union all

        SELECT '王五' as sname,'a,c,d,f' AS string FROM dual

    )

SELECT 

    distinct sname,REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS split_value

FROM 

    split_string

CONNECT BY

    REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL

    order by sname,split_value;

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

效果

image.png

最佳回答
0
JL98Lv6中级互助
发布于2024-3-12 13:34(编辑于 2024-3-12 14:16)

SQL SERVER:

SELECT 姓名, 爱好值

FROM (

    SELECT 姓名, 

           value AS 爱好值,

           ROW_NUMBER() OVER (PARTITION BY 姓名 ORDER BY (SELECT NULL)) AS rn

    FROM 你的表名

    CROSS APPLY STRING_SPLIT(爱好, ',')

) AS subquery

ORDER BY 姓名, rn;

  • 6关注人数
  • 243浏览人数
  • 最后回答于:2024-3-12 14:16
    请选择关闭问题的原因
    确定 取消
    返回顶部