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

преобразувайте един ред в колони

Разгледайте осеви таблици;

Вижте http://msdn.microsoft.com/en-us/library/ ms177410.aspx

Една проста заявка за краен брой StatusTypeNames би била нещо като;

SELECT * FROM 
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt 
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName

Обърнете внимание на използването на MAX. Ако има вероятност да имате няколко реда с една и съща комбинация от име на месец и име на статус, тогава може да искате да използвате SUM.

За да използвате динамични колони, както предлага madhivinan, можете да следвате този пример. Превъртете до дъното.

Опитах се да го накарам да работи с вашия пример, но тъй като имах няколко проблема, вероятно поради факта, че нямах таблиците. Обаче преследвате нещо като следното.

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT  @listCol = SELECT STUFF (( SELECT DISTINCT '],[' + 
                    StatusTypeName FROM @ResultsTable ORDER BY '],[' + 
                    StatusTypeName FOR XML PATH ('')), 1, 2, '') + ']'


SET @query =
'SELECT * FROM
      (SELECT MonthNameCol, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ('[email protected]+')) AS pvt ORDER BY MonthNameCol'

EXECUTE (@query)

Не е съвсем правилно, но е отправна точка.

Успех.



  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 заявка за връзка родител-дете

  2. SQL Server 2005:Извикване на съхранена процедура от клауза WHERE

  3. SQL Server 2005 ROW_NUMBER() без ORDER BY

  4. XML израз на пътя за включване на специални символи

  5. SQL Server 2008, колко място заема това?