2016-01-29 8 views
0

Я работаю на столе, который имеет данные, такие как this-- Извините за форматирование, как я здесь новыйPivot Работа в SQL Query

ColA Type Name Email 
----------------------- 
1  Type1 John  [email protected] 
1  Type2 Emily [email protected] 
2  Type2 Richard [email protected] 
3  Type1 Rebecca [email protected] 
3  Type2 Pumpkin [email protected] 

Я хочу, чтобы иметь выход на основе колонного типа

COL1 TYPE1Name TYPE1Email Type2Name Type2Email 
------------------------- 
1 John  [email protected]  Emily [email protected] 
2 NULL  NULL  Richard [email protected] 
3 Rebecca [email protected]  Pumpkin [email protected]  

Я попробовал 2 КТР с шарнирами и присоединиться к ним, но не получили результаты Любые предложения

+0

Можете ли вы показать нам, что вы пробовали до сих пор? –

+0

Вы можете использовать MAX (операторы CASE ... и GROUP BY colA – ZLK

ответ

1

присоединение стержень работал для меня, и я получил результат, как вам требуется,

SELECT NAME.COL1 
,NAME.TYPE1Name 
,email.TYPE1Email 
,NAME.TYPE2Name 
,email.TYPE2Email 
FROM (
    SELECT ColA AS COL1 
     ,Type1 AS TYPE1Name 
     ,Type2 AS TYPE2Name 
    FROM (
     SELECT ColA 
      ,NAME 
      ,Type 
     FROM #table_name --Your table name here 
     ) AS a 
    pivot(max(NAME) FOR Type IN (
       [Type1] 
       ,[Type2] 
       )) pvt 
    ) NAME 
INNER JOIN (
    SELECT ColA AS COL1 
     ,Type1 AS TYPE1Email 
     ,Type2 AS TYPE2Email 
    FROM (
     SELECT ColA 
      ,Email 
      ,Type 
     FROM #table_name --Your table name here 
     ) AS a 
    pivot(max(Email) FOR Type IN (
       [Type1] 
       ,[Type2] 
       )) pvt 
    ) email ON NAME.COL1 = email.COL1 

В результате, как показано ниже,

COL1 TYPE1Name TYPE1Email TYPE2Name TYPE2Email 
1  John  [email protected]  Emily  [email protected] 
2  NULL  NULL  Richard  [email protected] 
3  Rebecca  [email protected]  Pumpkin  [email protected] 
1

Самый простой и лучший результат будет использовать MAX с футляром выражениями. Это также можно создать динамически, если доступно больше типов.

SELECT 
    Col1  = ColA, 
    TYPE1Name = MAX(CASE WHEN [Type] = 'Type1' THEN [Name] END), 
    TYPE1Email = MAX(CASE WHEN [Type] = 'Type1' THEN [Email] END), 
    TYPE2Name = MAX(CASE WHEN [Type] = 'Type2' THEN [Name] END), 
    TYPE2Email = MAX(CASE WHEN [Type] = 'Type2' THEN [Email] END) 
FROM 
    myTable 
GROUP BY 
    ColA