我有一个具有唯一ID和相应值的表:
C1 C2
1 A;B
2 A
3 C;D;A
4 D;C;E
5 E
我想通过以下方式进行转化:
C1 A B C D E
1 1 1 0 0 0
2 1 0 0 0 0
3 1 0 1 1 0
4 0 0 1 1 1
5 0 0 0 0 1
我在某个地方遇到过这样的情况,但是却不知道如何执行此操作。
答案 0 :(得分:1)
对每列使用LIKE运算符:
select C1,
concat(';', c2, ';') like '%;A;%' A,
concat(';', c2, ';') like '%;B;%' B,
concat(';', c2, ';') like '%;C;%' C,
concat(';', c2, ';') like '%;D;%' D,
concat(';', c2, ';') like '%;E;%' E
from tablename
请参见demo。
如果表中的实际值是A,B,C,D,E,则可以简化为:
select C1,
c2 like '%A%' A,
c2 like '%B%' B,
c2 like '%C%' C,
c2 like '%D%' D,
c2 like '%E%' E
from tablename
结果:
| C1 | A | B | C | D | E |
| --- | --- | --- | --- | --- | --- |
| 1 | 1 | 1 | 0 | 0 | 0 |
| 2 | 1 | 0 | 0 | 0 | 0 |
| 3 | 1 | 0 | 1 | 1 | 0 |
| 4 | 0 | 0 | 1 | 1 | 1 |
| 5 | 0 | 0 | 0 | 0 | 1 |