2014-11-18 3 views
0

Я думаю, мне нужен PIVOT, но я еще не нашел пример, который использует только 1 столбец.
Текущие данныеSQL Pivot IF EXISTS

CustID  Value     
1    A     
1    B 
1    C     
2    A     
3    B     
4    A 
4    C 

Мне нужно

StudentNumber  A  B  C 
1     Yes Yes Yes 
2     Yes No No 
3     No Yes No 
4     Yes No Yes 

Я ценю это, вероятно, очень простой запрос, но я действительно борюсь!

ответ

0

Вы можете использовать оператор case в списке столбцов, проверяя значение null, чтобы получить нужное значение.

select P.CustID, 
     case when P.A is null then 'No' else 'Yes' end as A, 
     case when P.B is null then 'No' else 'Yes' end as B, 
     case when P.C is null then 'No' else 'Yes' end as C 
from YourTable as T 
pivot (min(T.Value) for T.Value in (A,B,C)) as P 

Или вы можете использовать производную таблицу и ISNULL в списке столбцов для No значений.

select P.CustID, 
     isnull(P.A, 'No') as A, 
     isnull(P.B, 'No') as B, 
     isnull(P.C, 'No') as C 
from (
    select CustID, 
      Value, 
      'Yes' as S 
    from YourTable 
    ) as T 
pivot (min(T.S) for T.Value in (A,B,C)) as P 
0

Попробуйте это.

SELECT custid, 
     Max(CASE 
      WHEN value = 'a' THEN 'YES' else 'NO' 
      END) A, 
     Max(CASE 
      WHEN value = 'b' THEN 'YES' else 'NO' 
      END) B, 
     Max(CASE 
      WHEN value = 'c' THEN 'YES' Else 'NO' 
      END) C 
FROM <tablename> 
GROUP BY CustID 
+0

вы можете попробовать его в сводном формате .. используя макс. Случай, мы можем сделать это в любом случае. – mohan111

+0

Это было так просто! Большое спасибо Pradeep – Clummzie