通过一次分组 2 列在表中执行反透视

Posted

技术标签:

【中文标题】通过一次分组 2 列在表中执行反透视【英文标题】:perform unpivoting in a table by grouping 2 columns at once 【发布时间】:2014-11-30 08:54:59 【问题描述】:

我想在下表中执行反透视以获得如下所述的输出。

输入

====================================
| ID | Subj1 | Mark1 | Subj2 |Mark2|
====================================
|1   | Eng12 | 24    | Mth23 |NULL |
====================================
|2   | PSY42 | 54    |NULL   | NULL|
====================================

输出

====================
| ID | Subj | Mark |
====================
|1   | Eng12 | 24  |
====================
|1   | MTh23 | NULL|
====================
|2   | PSY42 | 54  |
====================

【问题讨论】:

【参考方案1】:

根据您的数据和预期输出

SELECT
    id
    , subj1 subj
    , mark1 mark
FROM
    SomeTable
UNION ALL
SELECT
    id
    , subj2
    , mark2
FROM
    SomeTable
WHERE
    subj2 IS NOT NULL
;

【讨论】:

嗯,这是我没有注意到的一种使用方式。虽然它比 unpivot 慢一点。

以上是关于通过一次分组 2 列在表中执行反透视的主要内容,如果未能解决你的问题,请参考以下文章

一次性在表中添加硬编码数据

使用PK标识列在表中插入期间AS400 DB2重复键错误

jqGrid如何做字段在表全部数据中唯一性函数校验

Excel 数据透视表:在分组数据透视表中添加单列

检查多个列在表值参数中具有多个值中的任何一个

如何在 Oracle SQL 中仅选择最近 30 天内第一次在表中显示的这些 ID?