简体   繁体   English

取消透视表

[英]unpivot sql table

I have a table with logid,skilllevel,logskill where Data is like 我有一个带有logid,skilllevel,logskill的表,其中数据就像

logid, skilllevel1, skilllevel2,skilllevel3,logonskill1,logonskill2,logonskill3,

101,     90,          40,         60           1          2            3

102,      30,         20,         10           4          5            6

I want to get it arranged like the following: 我想按以下方式安排它:

logid,  skilllevel,  logonskill , skillposition

101,      90,            1           1

101,       40,           2           2

102,       30,           4           1

skilllevel1 corresponds to logonskill1 as so on skillposition is the substring of logonskill skilllevel1对应于logonskill1,因此Skillposition是logonskill的子字符串

How can I achieve this? 我该如何实现?

My preferred method is a lateral join, using apply : 我的首选方法是使用apply的横向联接:

select v.*
from t cross apply
     (values (logid, skilllevel1, logonskill1, 1),
             (logid, skilllevel2, logonskill2, 2),
             (logid, skilllevel3, logonskill3, 3)
     ) v(logid, skilllevel, logonskill, skillposition)
where skilllevel is not null or logonskill is not null;

Lateral joins are very powerful. 横向连接非常强大。 This is just one or many things that you can do with apply . 这仅仅是一个或者很多东西,你可以做apply

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM