pivot和unpivot sql表

时间:2017-12-20 15:23:39

标签: sql sql-server-2012

我目前有以下表格:


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 Sever 2012

1 个答案:

答案 0 :(得分:1)

一种方法是在每张桌子上重复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