web-dev-qa-db-fra.com

SQL Unpivot plusieurs colonnes de données

J'utilise SQL Server 2008 et j'essaye de débloquer les données. Voici le code SQL que j'utilise,

CREATE TABLE #pvt1 (VendorID int, Sa int, Emp1 int,Sa1 int,Emp2 int)
GO
INSERT INTO #pvt1  VALUES (1,2,4,3,9);

GO

--Unpivot the table.
SELECT distinct VendorID,Orders,Orders1
FROM 
   (SELECT VendorID, Emp1, Sa,Emp2,Sa1
   FROM #pvt1 ) p
UNPIVOT
   (Orders FOR Emp IN 
      (Emp1,Emp2)
)AS unpvt
UNPIVOT
   (Orders1 FOR Emp1 IN 
      (Sa,Sa1)
)AS unpvt1;
GO

Et voici le résultat du code ci-dessus.

VendorID    Orders  Orders1
1            4      2
1            4      3
1            9      2
1            9      3

Mais je veux que ma sortie soit la manière indiquée ci-dessous

VendorID    Orders  Orders1
1           4       2
1           9       3

La relation du code ci-dessus est 2 est liée à 4 et 3 est liée à 9.

Comment puis-je atteindre cet objectif?

20
user1005310

Un moyen plus simple d'annuler le pivotement des données serait d'utiliser un CROSS APPLY pour annuler le pivotement des colonnes par paires:

select vendorid, orders, orders1
from pvt1
cross apply
(
  select emp1, sa union all
  select emp2, sa1
) c (orders, orders1);

Voir SQL Fiddle with Demo . Ou vous pouvez utiliser CROSS APPLY avec la clause VALUES si vous ne souhaitez pas utiliser UNION ALL:

select vendorid, orders, orders1
from pvt1
cross apply
(
  values 
    (emp1, sa),
    (emp2, sa1)
) c (orders, orders1);

Voir SQL Fiddle with Demo

32
Taryn