我的情况有点奇怪。它是一个第三方应用程序,从前端不允许调用用户过程或 udf/标量函数。
唯一的选择是编写 SQL,下面是我的数据的外观。第一张图片有一个错误,最后一个 PID 应该是 1,倒数第二个是 2。
我需要的是这个,
这可以在 Advantage Database Server 9 中使用 UDF/游标轻松完成,但我别无选择。我不知道这是否真的可能。在 Sybase 中有一个名为 list 的函数,它可以很容易地完成这种工作,但在这里不确定。
应用程序确实允许调用内置函数。
我的情况有点奇怪。它是一个第三方应用程序,从前端不允许调用用户过程或 udf/标量函数。
唯一的选择是编写 SQL,下面是我的数据的外观。第一张图片有一个错误,最后一个 PID 应该是 1,倒数第二个是 2。
我需要的是这个,
这可以在 Advantage Database Server 9 中使用 UDF/游标轻松完成,但我别无选择。我不知道这是否真的可能。在 Sybase 中有一个名为 list 的函数,它可以很容易地完成这种工作,但在这里不确定。
应用程序确实允许调用内置函数。
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
我最终通过连接到数据字典创建了以下函数,但我得到了错误。
创建函数 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 解决方案][Advantage SQL][ASA] 错误 5054:命令不能 以当前用户权限完成。不能 在数据字典中创建函数对象。
我已要求创建此数据库/应用程序的公司在数据库中添加此功能,以便我可以使用它,让我们看看我在哪里登陆。