Sql 基于列值将行拆分为多行

Sql 基于列值将行拆分为多行,sql,db2,Sql,Db2,我有以下数据: Sr no....EMP_ID....Location...Period1....Value1....Period2....Value2....Period3....Value3 ...1......Emp001....India........Salary.....10000.....Bonus.....1000.......Bonus code...AB ...2......Emp002....UK...........Salary.....20000.....Bonus..

我有以下数据:

Sr no....EMP_ID....Location...Period1....Value1....Period2....Value2....Period3....Value3
...1......Emp001....India........Salary.....10000.....Bonus.....1000.......Bonus code...AB
...2......Emp002....UK...........Salary.....20000.....Bonus.....2000.......Bonus code...CD
我希望输出如下:

Sr no....EMP_ID....Location....Period...Value
....1......Emp001....India.......Salary.....10000
....2......Emp001....India.......Bonus.....1000
....3......Emp001....India.......Bonus Code.....AB
....4......Emp002....UK.......Salary.....20000
....5......Emp002....UK.......Bonus.....2000
....6......Emp002....UK.......Bonus Code.....CD

这是一个取消PIVOT操作。您可以使用
联合所有

select EmpNo, Location, Period1 as period, Value1 as Value
from data
union all
select EmpNo, Location, Period2 as period, Value2 as Value
from data
union all
select EmpNo, Location, Period3 as period, Value3 as Value
from data;

有些数据库直接支持unpivot以及其他方法。但是,以上是ANSI标准SQL。

您使用的是什么数据库,MySQL还是DB2?您应该相应地标记您的问题。它与OP的预期输出唯一不同的是
Sr no
。如果我有数千名员工……会怎么样?那么您将得到数千行。对于数千行,
union all
应该相当有效。