使用MySQL

时间:2019-09-11 07:27:02

标签: mysql sql pivot

我有一个具有唯一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

我在某个地方遇到过这样的情况,但是却不知道如何执行此操作。

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   |