Group By и Pivot с использованием SQL в MS Access - PullRequest
0 голосов
/ 24 января 2019

Возникла проблема с попыткой поворота набора данных (не уверен, что это транспонирование или нет?)

Допустим, у меня есть таблица 1:

Name       Food       Price  
 ------ -------------- ------- 
  Matt   Cheeseburger       5  
  Bill   Hotdog             4  
  Bill   Steak             10  
  Andy   Hotdog             4  
  Andy   Cheeseburger       5  
  Andy   Nachos             5  

Как бы я мог группировать по имени, но затем транспонировать другие столбцы, чтобы получить что-то вроде таблицы 2?

Таблица 2:

Name      Food_1         Food_2      Food_3   Price_1   Price_2   Price_3  
 ------ -------------- -------------- -------- --------- --------- --------- 
  Matt   Cheeseburger                                 5                      
  Bill   Hotdog         Steak                         4        10            
  Andy   Hotdog         Cheeseburger   Nachos         4         5         5 

Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

Это странно в ms-access, но вы можете решить, используя subquery:

select t.name, 
       max(iff(rnk = 1, Food)) as food_1,
       max(iff(rnk = 2, Food)) as food_2,
       max(iff(rnk = 3, Food)) as food_3,
       max(iff(rnk = 1, Price)) as price_1,        
       max(iff(rnk = 2, Price)) as price_2,        
       max(iff(rnk = 3, Price)) as price_3        
from (select t.*,
             (select count(*)
              from table as t1
              where t1.name = t.name and t1.id <= t.id 
             ) as rnk
      from table as t
     ) as t
group by t.name;

Предполагается, что в вашей таблице есть столбец identity, поэтому я просто использовал id.

...