逆透视:重组关系数据
想象一个表 StudentMarks
,存储学生姓名 (Name
) 及其各个科目的分数 (Maths
、Science
、English
)。 数据最初是这样组织的:
<code>Name, Maths, Science, English Tilak, 90, 40, 60 Raj, 30, 20, 10</code>
但是,如果我们需要不同的结构(每个科目的分数出现在新行中)怎么办? 期望的结果如下所示:
<code>Name, Subject, Marks Tilak, Maths, 90 Tilak, Science, 40 Tilak, English, 60 Raj, Maths, 30 Raj, Science, 20 Raj, English, 10</code>
这就是 SQL 逆透视的用武之地。它是一种将宽表(多列)转换为长表(多行)的强大技术。
以下是如何使用 SQL 查询来完成此操作:
<code class="language-sql">SELECT u.name, u.subject, u.marks FROM student s UNPIVOT ( marks FOR subject IN (Maths, Science, English) ) u;</code>
此查询使用 UNPIVOT
运算符。 它采用 Maths
、Science
和 English
列,并将它们转换为单个 Subject
列,并在 Marks
列中提供相应的分数。 结果是所需的长格式。
有关现场演示,请查看此 SQL Fiddle:
以上是SQL Unpivoting 如何将宽表格数据转换为长格式?的详细内容。更多信息请关注PHP中文网其他相关文章!