Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да завъртя? Как да конвертирате няколко реда в един ред с множество колони?

MYSQL издание

Ето и запитването. Обединената заявка генерира RowNumber (1,2,3,...) за всеки продукт във всяка клиентска група, използвайки Функция MySQL за потребителски дефинирани променливи . Външната заявка формира PIVOT таблица, използвайки GROUP BY и CASE с номера на редове от вътрешната таблица. Ако трябва да промените броя на колоните с продукти, помислете за създаването на тази заявка за динамично добавяне на MAX(CASE WHEN p.RowNum=X THEN p.Product END) as ProductX към списъка за избор.

select Clients.ClientName,
       MAX(CASE WHEN p.RowNum=1 THEN p.Product END) as Product1,
       MAX(CASE WHEN p.RowNum=2 THEN p.Product END) as Product2,
       MAX(CASE WHEN p.RowNum=3 THEN p.Product END) as Product3,
       MAX(CASE WHEN p.RowNum=4 THEN p.Product END) as Product4


FROM Clients
JOIN
(
  SELECT Products.*,
       if(@ClientId<>ClientId,@rn:=0,@rn),
       @ClientId:=ClientId,
       @rn:[email protected]+1 as RowNum

  FROM Products, (Select @rn:=0,@ClientId:=0) as t
  ORDER BY ClientId,ProductID
 ) as P 
   ON Clients.ClientId=p.ClientId

GROUP BY Clients.ClientId

SQLPiddle демонстрация

SQL Server Edition:

select Clients.ClientId,
       MAX(Clients.ClientName),
       MAX(CASE WHEN p.RowNum=1 THEN p.Product END) as Product1,
       MAX(CASE WHEN p.RowNum=2 THEN p.Product END) as Product2,
       MAX(CASE WHEN p.RowNum=3 THEN p.Product END) as Product3,
       MAX(CASE WHEN p.RowNum=4 THEN p.Product END) as Product4


FROM Clients
JOIN
(
  SELECT Products.*,
       ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY ProductID) 
         as RowNum

  FROM Products
 ) as P 
   ON Clients.ClientId=p.ClientId
GROUP BY Clients.ClientId

SQLPiddle демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. вмъкване на данни от една таблица в друга в mysql

  2. Как мога да видя командния низ, когато използвам параметри на MySqlCommand?

  3. Твърде много автоматични увеличения с АКТУАЛИЗИРАНЕ НА ДУПЛИКАТ КЛЮЧ

  4. Нуждаете се от помощ с йерархична Mysql заявка

  5. Вземете многоъгълни точки mysql