2010-10-29 55 views
2

J'ai les données suivantes retournées acheter une requête SQL simple. Le nombre de sites pourrait changer, mais X, Y, Z sont fixes (ils sont différents types d'accidents, et les données stockées représente le nombre d'occurences)Problème de Pivot SQL - agrégats multiples?

| Site | X | Y | Z | 
-------------------- 
    A  1 2 3 
    B  4 5 6 
    C  7 8 9 

je dois obtenir le format suivant

| A | B | C | 
-------------- 
    1 4 7 
    2 5 8 
    3 6 9 

J'ai ce jusqu'à

select * 
from Example 
pivot 
(
Max(X) 
for site in ([A],[B],[C]) 
) as p 

Mais je pense que je besoin de plusieurs agrégats (pour X, Y et Z).

Voici un script rapide pour créer les données de base

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Example](
    [Site] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL, 
    [X] [int] NOT NULL, 
    [Y] [int] NOT NULL, 
    [Z] [int] NOT NULL 
) ON [PRIMARY] 

insert into Example(Site, X,Y,Z) Values ('A',1,2,3) 
insert into Example(Site, X,Y,Z) Values ('B',4,5,6) 
insert into Example(Site, X,Y,Z) Values ('C',7,8,9) 

Toute aide vraiment bienvenue que je suis coincé!

Mark

Répondre

1

Vous devez UNPIVOT vos données, avant rePIVOTing il sur le site de l'accident - comme ceci:

select * 
from Example 
unpivot 
(
numbers 
for type in (x,y,z) 
) as p 
pivot 
(
Max(numbers) 
for site in ([A],[B],[C]) 
) as q 
+0

Parfait, j'ai maintenant travailler. –