2014-01-11 49 views
0

我需要在舊的不良設計的數據庫工作從SQL Server逗號分隔的列值擺動

它的表像下面

CREATE TABLE answers (ID INT, ans NVARCHAR(300)) 
INSERT INTO answers VALUES 
(1,'a,b,a,c,d,b,x,x,y'), 
(2,'b,b,a,c,d,d,x,x,y'), 
(3, 'p,q,r,s,p,q') 

我需要的結果類似下面

id a b c d e 
1 2 2 1 1 0 

什麼可能是最好的方法?

列是從a到z

+1

你不這樣做在SQL中。單個字段的值很難被分割成實際的NEW字段,特別是當「新」字段的數量是任意的並且變化的時候。將'ans'字段吸入您的客戶端應用程序,並在那裏分解。 –

回答

2

您需要計算每行上的特定字母。這是可能的:

select id, 
     (len(ans) - len(replace(ans, 'a', ''))) as a, 
     (len(ans) - len(replace(ans, 'b', ''))) as b, 
     (len(ans) - len(replace(ans, 'c', ''))) as c, 
     (len(ans) - len(replace(ans, 'd', ''))) as d, 
     (len(ans) - len(replace(ans, 'e', ''))) as e 
from answers; 

計數通過取ans列的長度,然後減去長度時每個字母被刪除計算。

+1

你是SQL的王者,向你傳遞信息 – sumit