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

SQL PIVOT с три колони

Опитайте нещо подобно:

DECLARE @myTable AS TABLE([ID] INT, [Field] VARCHAR(20), [Value] VARCHAR(20))
INSERT INTO @myTable VALUES ('1', 'year', '2011')
INSERT INTO @myTable VALUES ('1', 'month', 'August')
INSERT INTO @myTable VALUES ('2', 'year', '2009')
INSERT INTO @myTable VALUES ('1', 'day', '21')
INSERT INTO @myTable VALUES ('2', 'day', '31')
INSERT INTO @myTable VALUES ('2', 'month', 'July')
INSERT INTO @myTable VALUES ('3', 'year', '2010')
INSERT INTO @myTable VALUES ('3', 'month', 'January')
INSERT INTO @myTable VALUES ('3', 'day', NULL)

SELECT [ID], [year], [month], [day]
FROM
(
      SELECT [ID], [Field], [Value] FROM @myTable
) t
PIVOT
(
    MIN([Value]) FOR [Field] IN ([year], [month], [day]) 
) AS pvt
ORDER BY pvt.[year] DESC

Което ще даде резултати от:

ID  year    month   day
1   2011    August  21
3   2010    January NULL
2   2009    July    31


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Външният ключ подобрява ли ефективността на заявката?

  2. Свързване на Bastion сървър към PostgreSQL сървър чрез SSH тунел

  3. Съхраняването на големи файлове в база данни причинява изключение от тип „System.OutOfMemoryException“

  4. Android достъп до отдалечена SQL база данни

  5. Използване на набор от резултати от подизбор, когато се срещнат дублиращи се редове