2010-09-27 7 views
4

La requête suivante fonctionne comme prévu.Transpose les colonnes en lignes

Mais comment puis-je obtenir les résultats dans les lignes qui sont affichées dans les colonnes?

select curdate() AS one, 
date_sub(curdate(), interval 15 day) AS two 
, date_sub(curdate(), interval 30 day) AS three 
, date_sub(curdate(), interval 45 day) AS four 
, date_sub(curdate(), interval 60 day) AS five 
, date_sub(curdate(), interval 75 day) AS six 
, date_sub(curdate(), interval 90 day) AS seven 
; 

| one  | two  | three  | four  | five  | six  | seven  | 
+------------+------------+------------+------------+------------+------------+------------+ 
| 2010-09-27 | 2010-09-12 | 2010-08-28 | 2010-08-13 | 2010-07-29 | 2010-07-14 | 2010-06-29 | 

Résultats attendus dans une rangée:

one 2010-09-27 
two 2010-09-12 
three 2010-08-28 
four 2010-08-13 
five 2010-07-29 
six 2010-07-14 
seven 2010-06-29 

Répondre

7

Vous pouvez utiliser UNION ALL pour cette

select 'one' as label, curdate() as val 
UNION ALL 
select 'two' as label, date_sub(curdate(), interval 15 day) as val 
UNION ALL 
select 'three' as label, date_sub(curdate(), interval 30 day) as val 
UNION ALL 
select 'four' as label, date_sub(curdate(), interval 45 day) as val 
UNION ALL 
select 'five' as label, date_sub(curdate(), interval 60 day) as val 
UNION ALL 
select 'six' as label, date_sub(curdate(), interval 75 day) as val 
UNION ALL 
select 'seven' as label, date_sub(curdate(), interval 90 day) as val 
+0

Je pense que cela ne fonctionne que si vos colonnes sont les mêmes types de données. Je reçois cette erreur: "La conversion a échoué lors de la conversion de la valeur varchar 'fieldx' en type de données int. ' – Misi

+1

@Misi Vous auriez besoin de convertir la colonne numérique en chaîne. –

+0

Avez-vous un SP qui fait cela? parce que j'ai besoin d'extraire des données dynamiques en ne connaissant que le nom de la table. Et comment puis-je transposer si j'ai plusieurs lignes? – Misi