2009-02-13 10 views
0

J'ai une requête SQL (en utilisant MS-SQL 2005) qui génère des données avec ces colonnes:Comment UNPIVOT pour diviser des colonnes en rangées?

TimeStamp | SpeedMax | SpeedMin | HeightMax | HeightMin 
------------------------------------------------------- 
10  | 50  | 10  | 300  | 70 

La forme que j'ai besoin dans bien est ceci:

TimeStamp | Speed | Height 
--------------------------- 
10  | 50 | 300   <-- one row for the max values 
10  | 10 | 70   <-- a second row for the min values 

Compte tenu de la première ensemble de résultats ... quelle requête aurais-je besoin pour obtenir les données dans le deuxième format? Je pense que cela pourrait impliquer un non pivot, mais je suis nouveau à cela, et j'ai du mal à savoir quoi écrire.

Merci beaucoup.

Répondre

2
SELECT TimeStamp, 
     minmax, 
     CASE WHEN minmax = 0 THEN SpeedMax ELSE SpeedMin END AS Speed 
     CASE WHEN minmax = 0 THEN HeightMax ELSE HeightMin END AS Height 
FROM Table, 
(
    SELECT 0 AS minmax 
    UNION ALL 
    SELECT 1 
) mm 

Vous pouvez ajouter

OPTION (FORCE ORDER) 

pour éviter la double balayage sur Table

1

Essayez

SELECT TimeStamp, SpeedMax AS Speed, HeightMax AS Height 
FROM Table 
UNION ALL 
SELECT TimeStamp, SpeedMin AS Speed, HeightMin AS Height 
FROM Table 
Questions connexes