如何在Excel或SQL中将数据从宽格式传输到长格式?

gar*_*rry 2 sql t-sql sql-server excel sql-server-2008

我有一个如下所示的数据.任何想法如何在Excel或SQL中从宽格式转换为长格式.

ID       TOTAL    SCORE   PLAYER
34543    12342     456    45
45632    34521     241    33
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

ID        DATA_TYPE   VALUE
34543      TOTAL      12342
34543      SCORE      34521
34543      PLAYER     45
45632      TOTAL      34521
45632      SCORE      241
45632      PLAYER      33
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

我首选的univoting方法是使用apply:

select t.id, v.*
from t cross apply
     (values ('TOTAL', total), ('SCORE', score), ('PLAYER', player)
     ) v(DATA_TYPE, VALUE);
Run Code Online (Sandbox Code Playgroud)

除了相当简洁之外,这是对横向连接的良好介绍.这是SQL中非常强大的构造,可用于许多其他目的(不同于UNPIVOT).它也只扫描一次表,因此效率更高UNION ALL.