Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak przestawić wiele kolumn bez agregacji

Użyj row_number() funkcji i wykonaj warunkowe agregacja :

select id, IdCust, Ref,
       max(case when Seq = 1 then stock end) as [Stock A], -- second table *id*
       max(case when Seq = 1 then code end) as [Code 1],
       max(case when Seq = 1 then price end) as [Price1],
       max(case when Seq = 2 then stock end) as [Stock B], -- second table *id*
       max(case when Seq = 2 then code end) as [Code 2],
       max(case when Seq = 2 then price end) as [Price2]
from (select f.*, s.Id Stock, s.Code, s.Price,
             row_number() over (partition by f.Ref order by s.id) as Seq
     from first f
     inner join second s on s.Ref = f.Ref 
     ) t
group by id, IdCust, Ref;

Jednak to pasowałby do znanych inne wartości, których potrzebujesz, użyj dynamic rozwiązanie na to.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz rozmiar bazy danych SQL Server

  2. Partycjonowanie tabeli przy użyciu 2 kolumn

  3. Konwersja nie powiodła się podczas konwertowania wartości varchar „simple” na typ danych int

  4. Warunki wyścigu kolejki procesów SQL Server

  5. Procedura składowana ze zmienną liczbą parametrów