pivot和unpivot sql表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pivot和unpivot sql表相关的知识,希望对你有一定的参考价值。

我目前有以下表格:


Check 1:
Name        |Q1|Q2|Q3|Q4
----------- |--|--|--|--
McDonalds   | P| P| F| P
Burger King | F| P| P| F

Check 2:
Name        |Q1|Q2|Q3|Q4
----------- |--|--|--|--
McDonalds   | F| F| F| P
Burger King | F| P| P| P

我想在Q1-Q4上打开,以便我得到一个名为'Quarter'的列。我还想将两个(或更多)表与关于该检查的新列组合,例如:


Name        |Quarter|Check 1|Check 2
------------|-------|-------|-------
McDonalds   |     Q1|      P|      F
McDonalds   |     Q2|      P|      F
McDonalds   |     Q3|      F|      F
McDonalds   |     Q4|      P|      P
Burger King |     Q1|      F|      F
Burger King |     Q2|      P|      P
Burger King |     Q3|      P|      P
Burger King |     Q4|      F|      P

我找到了一种通过以下方法对四分之一列上的表格进行取消操作的方法:

SELECT Name, Quarter, PassFail
FROM Check1
unpivot
(
  PassFail
  for Quarter in (Q1, Q2, Q3, Q4)
) u

但我无法将这两个步骤结合起来。任何帮助,将不胜感激。

编辑我正在使用Microsoft SQL Server 2012

答案

一种方法是在每张桌子上重复你的UNPIVOTJOIN结果:

SELECT T1.*, T2.Check2
FROM (SELECT Name, Quarter, Check1
      FROM CheckTable1
      UNPIVOT
       (
        Check1
        for Quarter in (Q1, Q2, Q3, Q4)
       ) u
     ) T1
JOIN (SELECT Name, Quarter, Check2
      FROM CheckTable2
      UNPIVOT
        (
          Check2
          for Quarter in (Q1, Q2, Q3, Q4)
        ) u
      ) T2 ON T1.NAME = T2.NAME
          AND T1.QUARTER = T2.QUARTER

以上是关于pivot和unpivot sql表的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 使用 Pivot 和 UnPivot 实现行列转换

SQL Server 使用 Pivot 和 UnPivot 实现行列转换

SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例

在 Sql Server 中使用 Pivot/unpivot 将单行转换为单列

SQL 行转列 列转行 PIVOT UNPIVOT

如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?