如何转换逗号分隔列表中的列数据

Posted

技术标签:

【中文标题】如何转换逗号分隔列表中的列数据【英文标题】:How to convert columns data in comma separated list 【发布时间】:2013-03-13 01:04:52 【问题描述】:

我的情况有点奇怪。它是一个第三方应用程序,从前端不允许调用用户过程或 udf/标量函数。

唯一的选择是编写 SQL,下面是我的数据的外观。 第一张图片有错误,最后一个 PID 应该是 1,倒数第二个是 2。

我需要的是这个,

这可以在 Advantage Database Server 9 中使用 UDF/游标轻松完成,但我别无选择。我不知道这是否真的可能。在 Sybase 中有一个名为 list 的函数,它可以很容易地完成这种工作,但在这里不确定。

应用程序确实允许调用内置函数。

【问题讨论】:

它有类似 GROUP_CONCAT 的东西吗? 我不知道,但我正在搜索文档 如果没有,请阅读此讨论。它可以帮助您实现等价物。 sqlservercentral.com/Forums/Topic984025-391-1.aspx 目前不支持 GROUP_CONCAT,但正在处理中。如果您使用的是 ADS 9 或更高版本,并且第三方应用程序使用数据字典作为后端数据库(在连接路径中查找 *.add),那么您应该能够编写一个用户定义的函数来返回它。 UDF 作为普通 SQL 语句的一部分被调用。因此,如果允许您执行自己的 SQL,您应该能够毫无问题地定义和使用 UDF。 我今天会尝试写它,但我想确保我正确关闭光标。我将在当天晚些时候发布代码,请您确认我正确关闭了光标。 【参考方案1】:
declare @table table
(
   PID integer,
   Medicine varchar(10)  )

insert into @table values (1, 'ABC')
insert into @table values (2, 'ABC')
insert into @table values (1, 'DEF')
insert into @table values (2, 'DEF')
insert into @table values (1, 'GHI')



SELECT DISTINCT a.PID,
                Medicine = STUFF((SELECT ',' + b.Medicine
                                    FROM @table b
                                    WHERE a.PID = b.PID
                                      FOR XML Path('')),1,1,'')
FROM @table a

结果:

**PID   Medicine**
1   ABC,DEF,GHI
2   ABC,DEF

【讨论】:

STUFF 不是 Advantage 中的支持功能。 所有 STUFF 所做的只是从 XML 路径查询中删除返回字符串中的第一个 , 字符。您可以通过多种方式删除它,但 STUFF 是最简单的,因为不需要知道字符串的长度。【参考方案2】:

我最终通过连接到数据字典创建了以下函数,但我得到了错误。

创建函数 GetReport_Meds
   (
   PID varchar(15)
   )
   返回字符串
开始
声明药物字符串;
DECLARE CurMeds 光标 AS SELECT med_code from drug where patient =
TRIM(PID) 和 end_date 为空;
药物 = "";
打开 CurMeds;
同时获取 CurMeds 做
药物 = TRIM(Meds)+TRIM(CurMeds.med_code)+",";
结束;
关闭 CurMeds;
返回左(Meds,LEN(Meds)-1);
结尾;
poQuery:错误 7200:AQE 错误:状态 = HY000;本机错误 = 5054; [iAnywhere 解决方案][Adv​​antage SQL][ASA] 错误 5054:该命令无法 以当前用户权限完成。不能 在数据字典中创建函数对象。

我已要求创建此数据库/应用程序的公司在数据库中添加此功能,以便我可以使用它,让我看看我在哪里登陆。

【讨论】:

以上是关于如何转换逗号分隔列表中的列数据的主要内容,如果未能解决你的问题,请参考以下文章

包含逗号分隔值的列中的值

如何根据两个逗号分隔值的列中的任何一个值获取记录

将逗号分隔的字符串转换为Python中的列表

mysql中把selct中的数据列表转换成逗号分隔的字符串

如何将逗号分隔值放入oracle中的列

如何从熊猫数据框中的列中删除字符串值