SQL查询删除多个列(规范化)

时间:2013-11-06 06:28:41

标签: sql normalization dml

一个人常常反对填充的非规范化表,虽然有一个主键,例如:

| RowID  | Column1 | Column2 | Column3 | Column4 | ...
| 'Row1' | 'a1'    | 'a2'    | 'a3'    | 'a4'    |
| 'Row2' | 'b1'    | 'b2'    | 'b3'    | 'b4'    |
| 'Row3' | 'c1'    | 'c2'    | 'c3'    | 'c4'    |
...

问题是:如何有效地将其转换为存储数据的3nf? (理想情况下,我们假设列数及其名称未知)

| RowID | ColumnID | Value |
| 1     | 1        | 'a1'  |
| 1     | 2        | 'a2'  |
...

或理想情况下

| RowID  | ColumnID  | Value |
| 'Row1' | 'Column1' | 'a1'  |
| 'Row1' | 'Column2' | 'a2'  |
...

我知道的一个解决方案是使用几个UNION选择一个在另一个下面的列,但是在许多列的情况下脚本看起来很糟糕。

非常感谢任何帮助!

祝你好运, 君士坦丁。

1 个答案:

答案 0 :(得分:0)

实际上,“Unpivot”操作符就是我所需要的。

Unpivot with column name

最佳, 君士坦丁