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

时间:2013-03-13 01:04:53

标签: sql advantage-database-server

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

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

enter image description here

我需要的是这个,

enter image description here

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我最终通过连接到数据字典来创建以下功能,但是我收到了错误。

CREATE FUNCTION GetReport_Meds
   ( 
   PID varchar(15)
   )
   RETURNS String
BEGIN
DECLARE Meds String;
DECLARE CurMeds cursor AS SELECT  med_code from medication where patient = 
TRIM(PID) and end_date is null;
Meds = "";
OPEN CurMeds;
WHILE FETCH CurMeds DO
Meds = TRIM(Meds)+TRIM(CurMeds.med_code)+",";
END WHILE;
CLOSE CurMeds;
RETURN LEFT(Meds,LEN(Meds)-1);
END;
 poQuery: Error 7200:  AQE Error:  State = HY000;   NativeError = 5054;
  [iAnywhere Solutions][Advantage SQL][ASA] Error 5054:  The command cannot
 be completed with the current user permissions.  Cannot 
create function object in the data dictionary.

我已经请求创建此db / app的公司在db中添加此功能,以便我可以使用它,让我们看看我的位置。