2009-02-19 10 views
1

J'utilise les services de génération de rapports pour créer un graphique de rapport. Cependant mes données ressemblent à ceci:La requête SQL transforme les résultats des colonnes en lignes

Table1 
    C01 C02 C03 C04 
    1  2  3  4 

I need to do a sql query to return data that looks like this: 
    Any_Col_name 
    1 
    2 
    3 
    4 

J'utilise MS Reporting Services avec une base de données Oracle. Je ne peux pas restructurer la table.

+0

Toute table qui a C01..C04 n'est presque certainement pas normalisée. – paxdiablo

+1

Pax, vous êtes un idiot. Il n'a jamais dit qu'il a conçu la table, juste qu'il l'interroge? Aller flamme ailleurs. –

+0

Et comment savez-vous que ce sont les noms de colonnes réelles? Plus que probablement, il utilise simplement C## pour un exemple. Qu'est-ce qui a rampé dans ton cul et est mort? –

Répondre

6
select c01 from table 
union all 
select c02 from table 
union all 
select c03 from table 
union all 
select c04 from table 
+0

Pourquoi cela a-t-il été rejeté? –

+0

Pourquoi Mark est-il déprimé? Une union est la façon correcte de gérer cela avec SQL ANSI générique. – cdonner

+0

Je pense que Pax l'a fait sortir de la colère ... –

1

Jetez un oeil ici.

http://support.microsoft.com/kb/175574

Il décrit comment "Rotate" une table dans SQL Server. Je sais que vous avez dit Oracle acheter vous pourriez glaner quelque chose.

+0

C'est la mauvaise direction. c'est déjà plat et il le veut vertical. –

+0

@MB righto :) Ta. –

+0

J'ai trouvé une autre réponse à mod +1 ... pas de rancune. –

2

Si vous utilisez Oracle 11G et au-dessus, vous pouvez également utiliser UNPIVOT pour cela, il devrait être plus efficace que le syndicat tous (ont pas testé parce que je n'ai pas oracle autour)

SELECT Any_Col_name FROM table 
    UNPIVOT INCLUDE NULLS (Any_Col_name FOR Col IN (C01,C02,C03,C04)) 
+0

Il n'a pas dit que l'Oracle était 11g. Unpivot n'est pas disponible jusque-là, sauf si MSRS restructure simplement la requête envoyée à Oracle pour rassembler chaque ligne, puis applique la syntaxe SQL Server à cet ensemble de résultats. Je ne sais pas comment cela va fonctionner. –

+0

@Mark, j'ai édité la réponse pour réfléchir. MSRS ne fera rien de génial aux requêtes. –

+0

Kewl ... Toujours une bonne idée de donner le dernier et le meilleur comme une option ... taquiner les gens avec ce qu'ils pourraient avoir si seulement. –

0

Nous avons résolu ce problème plusieurs fois. Votre meilleur plan d'action consiste à écrire les fonctions PL/SQL appropriées qui parcourront toutes les colonnes, les publiant en tant que lignes. Je dis de le faire de cette façon, car ce ne sera probablement pas la dernière fois que vous utiliserez cette fonctionnalité.

Questions connexes