林瑜笙 2022-08-11 12:57 采纳率: 50%
浏览 30

SQLSERVER 中的sql语句问题

sqlserver-当一个字段以逗号隔开存多个id,用sql取这个id对应的名字,
formtable_main_143 存储数据格式如下 id为主键(字段类型int),zrr1为HrmResource中的id组成(字段类型text)

img

HrmResource表数据如下 id字段类型int lastname字段类型varchar(1000)

img

在网上找到的方法:SELECT a.id,a.zrr1 ,'显示列' = STUFF(( SELECT ',' + b.lastname
FROM HrmResource b
where PATINDEX('%,' + RTRIM(b.id) + ',%',',' + CAST(a.zrr1 as varchar) + ',')>0
ORDER BY PATINDEX('%,' + RTRIM(b.id) + ',%',',' + CAST(a.zrr1 as varchar) + ',')
FOR XML PATH('')), 1, 1,''
)
FROM formtable_main_143 a

遇到的问题:

img


数据显示不全

  • 写回答

1条回答 默认 最新

  • IT技术分享社区 数据库领域优质创作者 2022-08-11 13:11
    关注

    http://t.csdn.cn/4H0Z3
    自定义函数 字符串分割为list 然后 使用 in配合stuff 函数

    
    -- 字符串指定字符分割为list
    CREATE FUNCTION [dbo].[splitl] (
        @String VARCHAR(MAX),
        @Delimiter VARCHAR(MAX)
    ) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS
    BEGIN
        DECLARE @idx INT=1
        DECLARE @slice VARCHAR(MAX) 
        IF LEN(@String) < 1 OR LEN(ISNULL(@String,'')) = 0
            RETURN
        WHILE @idx != 0
        BEGIN
            SET @idx = CHARINDEX(@Delimiter,@String)
            IF @idx != 0
                SET @slice = LEFT(@String,@idx - 1)
            ELSE
                SET @slice = @String
            IF LEN(@slice) > 0
                INSERT INTO @temptable(items) VALUES(@slice)
            SET @String = RIGHT (@String, LEN(@String) - @idx)
            IF LEN(@String) = 0
                BREAK
        END
        RETURN
    END
    GO
    -- 调用方式 
    SELECT * FROM dbo.splitl('aaa|bbb|ccc','|')
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月11日

悬赏问题

  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme
  • ¥15 为什么我明明有这个文件调试器还显示错误?
  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库