Группировать столбцы через SQL без использования функции Pivot - PullRequest
0 голосов
/ 12 июня 2018

У меня есть следующая таблица.

Store, Code, Active 
1000, C, N  
1000, D, N  
1000, J, N   
1000, R, N   
2000, C, N  
2000, D, N  
2000, J, N  
2000, R, N  
2000, F, N  
3000, C, Y  
3000, D, Y  
3000, J, Y  
3000, R, Y  
4000, C, Y  
4000, D, Y  
4000, J, Y  
4000, R, Y  
4000, F, Y      

Я хотел бы изменить ее в SQL, чтобы она выглядела следующим образом.

Store, CDJR, CDJRF 
1000, N, N/A  
2000, N/A, N  
3000, Y, N/A  
4000, N/A, Y  

Имейте в виду, что таких строк тысячи.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 июня 2018

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

select
  store,
  case when sum(codeflag) = 1111 then max(active) else 'N/A' end as cdjr,
  case when sum(codeflag) = 11111 then max(active) else 'N/A' end as cdjrf
from (
  select
    store,
    case when code = 'C' then 1 
         when code = 'D' then 10
         when code = 'J' then 100
         when code = 'R' then 1000
         when code = 'F' then 10000
    end as codeflag,
    active
  from t
) t
group by store

Результат:

 store | cdjr | cdjrf
-------+------+-------
  1000 | N    | N/A
  2000 | N/A  | N
  3000 | Y    | N/A
  4000 | N/A  | Y

Если вы не можете принять то же значение для активного столбца, нам нужно заменить max(active) просто activeзначение столбца и включить его в предложение GROUP BY.Это приведет к появлению нескольких строк для каждого значения магазина, где в активном столбце содержится более одного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...