2010-06-15 10 views
-1

Peut-on faire une transposition matricielle (les lignes deviennent des colonnes et les colonnes deviennent des lignes) dans SQL2005/2008 standard?Matrice Transposer TSQL

 
1 2 3 4 5 
4 5 6 6 7 
7 8 9 8 9 
1 3 4 5 6 
2 4 5 6 7

changements à

1 4 7 1 2 
2 5 8 3 4 
3 6 9 5 6 
4 6 8 5 6 
5 7 9 6 7

sur la façon dont pas de lignes < > pas de colonne?

considérons le non des lignes qu'il a corrigées.

Répondre

0
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Result]') AND type in (N'U')) 
DROP TABLE [dbo].[Result] 
GO 

CREATE TABLE [dbo].[Result](
    [RN] [int] NULL, 
    [1] [int] NULL, 
    [2] [int] NULL, 
    [3] [int] NULL, 
    [4] [int] NULL, 
    [5] [int] NULL 
) ON [PRIMARY] 

GO 

insert into Result 
select 1,11,12,13,14,15 
union all 
select 2,21,22,23,24,25 
union all 
select 3,31,32,33,34,35 
union all 
select 4,41,42,43,44,45 
union all 
select 5,51,52,53,54,55 

select * from Result 


;WITH Preresult AS 
(SELECT RN AS Row, 
    Col, 
    Val 
FROM Result 
UNPIVOT (Val FOR Col IN ([1],[2],[3],[4],[5])) unpvt 
) 
--select * from Preresult 
--Transform array into matrix 
SELECT 
    Col as Row, 
    [1], 
    [2], 
    [3], 
    [4], 
    [5] 

FROM 
    (
     SELECT Row, Col, Val FROM Preresult) t1 
     PIVOT 
     (MAX(Val) 
     FOR Row IN ([1],[2],[3],[4],[5]) 
     ) AS pvt 
ORDER BY Row;-->replace Col for column sorting 

Source: http://www.devx.com/dbzone/Article/40223/1763?supportItem=5

+0

quel est le problème avec cette réponse, il fonctionne bien, avez testé avec succès. S'il vous plaît, expliquez pourquoi j'ai reçu la marque -ve. – rmdussa

+0

Votre réponse ne fournit aucune explication sur le fonctionnement du code, c'est probablement pourquoi il a été voté. – afuzzyllama

0

Vous voudrez peut-être reformater votre question, mais une transformation est facile si vos données sont sous la forme:

CREATE TABLE matrix (Row int NOT NULL, Column int NOT NULL, Value <datatype> NOT NULL) 

SELECT Row AS Column 
     ,Column AS Row 
     ,Value 
FROM matrix