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

Как да трансформирам редовете в колони в sql server 2005

Има подобни въпроси тук ,тук отговори в stackoverflow.

Трябва да използвате оператора PIVOT във вашата заявка, за да постигнете това. Ето примера и обяснението как можете да направите това. Примерът е препратен от това източник.

---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                '],[' + t.Name
                        FROM    TESTTABLE AS t
                        ORDER BY '],[' + t.Name
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'

SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'

EXECUTE(@query)

Обяснение

1.Първата част на заявката

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                        '],[' + t.Name
                FROM TESTTABLE AS t
                ORDER BY '],[' + t.Name
                FOR XML PATH('')
              ), 1, 2, '') + ']'

ви дава приятен изравнен резултат от стойностите на колоната ви Име в един ред, както следва

[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]  

Можете да научите повече за STUFF и XML PATH тук и тук .

2.SELECT + @cols + FROM ще избере всички редове като имена на колони за крайния набор от резултати (pvt - стъпка 3)

т.е.

Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt] 

3. Тази заявка изтегля всички редове с данни, които са ни необходими, за да създадем резултатите от кръстосани раздели. (p) след заявката създава временна таблица с резултатите, които след това могат да се използват за удовлетворяване на заявката за стъпка 1.

(SELECT t1.Name, t1.Count FROM  TESTTABLE AS t1) p

4. Изразът PIVOT

PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt

прави действителното обобщение и поставя резултатите във временна таблица, наречена pvt като

Chery | Drew | Morgon | Kath | Kirk | Matt  
-------------------------------------------  
257     1500     13      500    200    76


  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. Изберете и редактирайте вертикални блокове в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 9

  3. Как да използвате FILEGROUPPROPERTY() в SQL Server

  4. SQL Server:максималният брой редове в таблицата

  5. Как да редактирам таблица, за да активирам CASCADE DELETE?