2013-03-13 145 views
1

我處於一種奇怪的狀態。它是從前端不允許用戶程序或udf /標量函數被調用的第三方應用程序。如何在逗號分隔列表中轉換列數據

唯一的選擇是編寫SQL,下面是我的數據外觀。 第一張圖有錯誤最後PID被假定爲1和倒數第二個2

enter image description here

我需要什麼要的就是這個,

enter image description here

這可以在這個Advantage數據庫服務器9中使用UDF /光標很容易完成,但我沒有選擇。我不知道這是否真的有可能。在Sybase中,存在一個名爲list的函數,它很容易完成這種工作,但在這裏不太確定。

應用程序確實允許調用內置函數。

+0

它有像GROUP_CONCAT一樣的東西嗎? – cha 2013-03-13 01:09:23

+0

不是我知道,但我正在搜索文檔 – MStp 2013-03-13 01:12:10

+0

如果沒有,請閱讀此討論。它可以幫助你實現一個等價物。 http://www.sqlservercentral.com/Forums/Topic984025-391-1.aspx – cha 2013-03-13 01:14:24

回答

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 /應用在數據庫中添加此功能,這樣我就可以使用它的公司,讓我們看看在那裏我的土地。

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 
+0

STUFF不是Advantage的支持功能。 – 2013-03-13 14:27:45

+0

用於嘗試的+1,是的我看不到東西是否受支持 – MStp 2013-03-13 15:31:45

+0

所有的STUFF正在做的是從XML Path查詢中移除返回字符串中的第一個','字符。您可以通過多種方式將其刪除,但由於不需要知道字符串的長度,所以STUFF是最簡單的方法。 – cusman 2013-10-29 13:55:08

相關問題