如何将所有列变成名称和值 SQL(如 Python 中的 pd.unstack(level=-1))

How to turn all columns into just name and value SQL (like pd.unstack(level=-1) in Python)

假设我们有一个 table 比如:

date   element1    element2   element3....

date1    42          30           63
date2    32          23           2 
date3    23          3            15

如何将这个table变成类似

的东西
date   elements   value

date1  element1    42
date2  element1    32
date3  element1    23
date1  element2    30
date1  element3 ...

这就像一种支点,但我不明白。如果有人知道这方面的捷径,我将不胜感激。

谢谢

SQL 你可以使用 union all :

select t.*
from ( (select date, 'element1' as elements, element1 from table t) union all 
       (select date, 'element2' as elements, element2 from table t) union all
       (select date, 'element3' as elements, element3 from table t) union all
        . . . 
     ) t
order by date, elements;

注意:不同的数据库以不同的方式对 运行 有自己的风格。

您可以将 unpivot 与 SQL 服务器和 Oracle 一起使用。

select date, 
    elements,
    value
from yourtable
unpivot
(
  value
  for elements in (element1, element2, element3)
) unpiv