从sql server中的逗号分隔列值转动

时间:2014-01-11 03:56:43

标签: sql sql-server pivot

我需要处理旧的设计不佳的数据库

它有如下表格

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 个答案:

答案 0 :(得分: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列的长度,然后减去每个字母删除后的长度。