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

Multi Column Pivot SQL Server

Ако стойностите са ABC и XYG са известни предварително, можете да направите условно агрегиране

SELECT ID,
       MAX(CASE WHEN type = 'ABC' THEN 'ABC' END) Type1,
       MAX(CASE WHEN type = 'ABC' THEN Date END) Date1,
       MAX(CASE WHEN type = 'XYG' THEN 'XYZ' END) Type2,
       MAX(CASE WHEN type = 'XYG' THEN Date END) Date2,
       MAX(Location) Location,
       MAX(Result) Result,
       MAX(CASE WHEN type = 'ABC' THEN [Proc] END) Proc1,
       MAX(CASE WHEN type = 'ABC' THEN ProcDate END) ProcDate1,
       MAX(CASE WHEN type = 'ABC' THEN ProcDetail END) ProcDetail1,
       MAX(CASE WHEN type = 'ABC' THEN ProcNotes END) ProcNotes1,
       MAX(CASE WHEN type = 'XYG' THEN [Proc] END) Proc2,
       MAX(CASE WHEN type = 'XYG' THEN ProcDate END) ProcDate2,
       MAX(CASE WHEN type = 'XYG' THEN ProcDetail END) ProcDetail2,
       MAX(CASE WHEN type = 'XYG' THEN ProcNotes END) ProcNotes2
  FROM
(
  SELECT * FROM table1 -- that's to emulate your current query with multiple joins
) q
 GROUP BY ID
 

Примерен резултат:

<преди>| ID | ТИП1 | ДАТА1 | ТИП2 | ДАТА2 | МЕСТОПОЛОЖЕНИЕ | РЕЗУЛТАТ | PROC1 | PROCDATE1 | PROCDETAIL1 | ПРОКНОТИ1 | PROC2 | PROCDATE2 | PROCDETAIL2 | PROCNOTES2 ||----|-------|--------------------------------|- ------|--------------------------------|---------- |--------|--------|------------------------------ -|-----------------|--------------|--------|------ --------------------------------|-----------------|----- ---------|| 1 | ABC | 01 януари 2010 г. 00:00:00+0000 | XYZ | 02 януари 2011 г. 00:00:00+0000 | ОК | AO | Proc_B | 01 януари 2013 г. 00:00:00+0000 | Това е Подробности | Proc_B Бележки | Proc_B | 01 януари 2013 г. 00:00:00+0000 | Това е Подробности | Proc_B бележки |

Ето го SQLFiddle демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между числови, плаващи и десетични числа в SQL Server

  2. TSQL - Добавяне на колона към всички таблици в база данни [ Пример за курсор]

  3. Как мога да получа номера на месеца (не името на месеца) от дата в SQL Server?

  4. T-SQL Skip Take Stored Procedure

  5. INSERT с помощта на LIST в Съхранена процедура