将字符串作为聚合函数的值进行透视表

时间:2016-01-03 09:06:34

标签: sql-server pivot

我有这个阶段性活动表及其相应的标志。

STAGE |  ACTIVITY | FLAG      |  STATUS  |
S1    |  A1       |S1_A1_FLAG | ST_S1_A1 |
S1    |  A2       |S1_A2_FLAG | ST_S1_A2 |
:        :            :          :
SN    |  A1       |SN_A1_FLAG | ST_SN_A1 |
SN    |  A2       |SN_A2_FLAG | ST_SN_A2 |
:     |  :        |   :       |  :       |
SN    |  AN       |SN_AN_FLAG | ST_SN_AN |

我必须创建一个具有以下结构的视图......

STAGE|   A1     |     A2       | ... | AN         |
---------------------------------------------------
S1   |S1_A1_FLAG|  S1_A2_FLAG  | ... | S1_AN_FLAG |
     | ST_S1_A1 |   ST_S1_A2   | ... |  ST_S1_AN  |
----------------------------------------------------
S2   |S2_A1_FLAG|  S2_A2_FLAG  | ... | S2_AN_FLAG |
     | ST_S2_A1 |   ST_S2_A2   | ... |  ST_S2_AN  |
----------------------------------------------------
:          :           :           :       :
----------------------------------------------------
SN   |SN_A1_FLAG|  SN_A2_FLAG  | ... | SN_AN_FLAG |
     | ST_SN_A1 |   ST_SN_A2   | ... |  ST_SN_AN  |

这里'标志'和'状态'是字符串值,必须显示在单个单元格中。

此外,使用"硬编码" case-when语句不是一个可行的选项,因为有几百个阶段,每个阶段至少包含十几个活动。 因为我是sql中的新手,所以欢迎任何关于相同的帮助

1 个答案:

答案 0 :(得分:2)

SELECT * from
(select Stage,Activity, flag+' ' + astatus as AStatus 
 FROM tblStage
)tb
PIVOT
(
  Min(AStatus)
  FOR Activity IN([A1],[A2])
)p;

检查这些:

  1. To Pivot on dynamic columns

  2. Also Check Pivot on Varchar Values.