2015-06-09 3 views
2

У меня есть этот набор данных, и я пытаюсь создать сводную таблицу для данных ниже. У меня есть некоторые проблемы при попытке указать дату для каждого типа.Pivot с идентификатором и датами

Member ID Type  Date 
    1   A  12/5/2014 
    1   b  3/6/2014 
    2   a  6/9/2015 
    2   b  3/2/2015 
    2   c  6/1/2014 
    3   a  6/5/2014 
    3   c  7/6/2014 
    4   c  9/13/2014 
    5   a  7/25/2014 
    5   b  6/24/2014 
    5   c  2/24/2014 

Тогда

Я хотел бы, чтобы выйти в виде сводной таблицы, например:

Member ID A  A date  B  B date  c  C date 
    1   Yes  12/5/2014 yes  3/6/2014 Null Null 
    2   Yes  6/9/2015 yes  3/2/2015 Yes 6/1/2014 
    3   Yes  6/5/2014 Null  Null  Yes 7/6/2014 
    4   Null  Null  Null  Null  Yes 9/13/2014 
    5   Yes  7/25/2014 yes  6/24/2014 Yes 2/24/2014 

я получил это далеко не включая даты

 SELECT 
     MemberID 
    ,Type 
    --,Date 

    into #Test9 

     FROM [Data].[dbo].[Test] 

I создайте таблицу Temp, затем попытайтесь выполнить поворот без даты

 Select * 
     From #Test9 
     Pivot (count(type) 
     for type in (a] 
      ,[b] 
      ,[c])) as pvt 

Помогло бы кто-нибудь помочь.

ответ

1

Предположим, что каждый член будет иметь только одно значение для каждого типа можно использовать условную агрегацию, чтобы получить результат, который вы хотите:

select 
    memberid, 
    max(case when type='a' then 'Yes' end) as "a", 
    max(case when type='a' then date end) as "a date", 
    max(case when type='b' then 'Yes' end) as "b", 
    max(case when type='b' then date end) as "b date", 
    max(case when type='c' then 'Yes' end) as "c", 
    max(case when type='c' then date end) as "c date" 
from your_table 
group by MemberID 

Sample SQL Fiddle

Это может быть довольно легко превращена в динамический запрос, если у вас нет фиксированного количества типов; есть много хороших ответов здесь, на Stack Overflow, который демонстрирует, как, включая канонический SQL Server Pivot question, к которому я обычно привязываюсь.

+1

Спасибо! он работал @jpw – Amaury

1

попробовать

declare @t table(memberid int,[type] char(1),[date] date) 
insert into @t(MemberID,[Type],[Date]) values 
    (1,'A','12/5/2014'), 
    (1,'b','3/6/2014'), 
    (2,'a','6/9/2015'), 
(2,'b','3/2/2015'), 
(2,'c','6/1/2014'), 
(3,'a','6/5/2014'), 
(3,'c','7/6/2014'), 
(4,'c','9/13/2014'), 
(5,'a','7/25/2014'), 
(5,'b','6/24/2014'), 
(5,'c','2/24/2014') 

select memberid, case when len(a)>0 then 'Yes' end as [A date],a, 
case when len(b)>0 then 'Yes' end as [B date],b, 
case when len(c)>0 then 'Yes' end [c date] ,c from @t t 
pivot(max([date]) for [type] in (a,b,c)) p 
+0

Спасибо, я хотел бы попробовать, но у меня нет доступа к объявлению или вставке @abdulnazar – Amaury

Смежные вопросы