2009-06-06 8 views
1

Dans SQL Server 2005, j'ai une table, par exemple tbl_Info. Là, j'ai une colonne dire Info.Transposition Colonne dans SQL Server 2005/2000

Les valeurs sont les sous

 
Name1 
Age1 
Sex1 
Name2 
Age2 
Sex2 
..... 
..... 
.....

Et les valeurs de la ligne continue comme ça.

Ma question est de savoir comment effectuer une transposition en ligne.

La sortie souhaitée sera

 
Name  Age  Sex 

Name1  Age1  Sex1 
Name2  Age2  Sex2 

.....  ....  ........ 
.....  ....  ........ 

Vous pouvez utiliser une variable de table ou d'une table temporaire.

Et s'il vous plaît ne donnez pas la solution en utilisant des assemblages. Parce que j'ai déjà fait cela en utilisant des assemblages, mais je veux une solution que je peux même utiliser dans SQL Server 2000.

+0

On dirait devoirs. –

Répondre

1

L'idée générale est que vous besoin d'une autre colonne pour garantir l'ordre - qui va généralement être une clé primaire d'un certain type entier, mais pour garder les choses simples disons que nous utilisons simplement:

CREATE TABLE foo (ord INT, col VARCHAR) 

avec ord juste inséré 0, 1, 2, etc.

maintenant, le SELECT que vous voulez est:

SELECT a.col AS Name, b.col AS Age, c.col AS Sex 
    FROM foo AS a 
    JOIN foo AS b ON(b.ord=1+a.ord) 
    JOIN foo AS c ON(c.ord=2+a.ord) 
    WHERE a.ord%3=0 

qui fonctionnera sur à peu près _A ny_thing qui ose s'appeler "SQL" ;-).

Par exemple, lorsque les données sont les suivantes:

ord col 
    0 John 
    1 23 
    2  M 
    3 Mary 
    4 21 
    5  F 
    6 Karl 
    7 25 
    8  M 

le résultat de l » est de SELECT ci-dessus:

Name Age Sex 
John 23  M 
Mary 21  F 
Karl 25  M 
+0

Je ne peux utiliser aucune autre colonne. Certaines contraintes sont déjà imposées dans le schéma de la base de données! Sinon, j'aurais définitivement pris votre solution. –

+0

Si vous avez une seule colonne, rien ne garantit que la commande est ce que vous voulez qu'elle soit. Si vous êtes chanceux, vous pourrez peut-être trouver une façon de synthétiser cette colonne de commande dont vous avez désespérément besoin - mais une table à une seule colonne n'aura jamais d'ordre * robuste, intrinsèque * (sauf ce que vous pourriez obtenir en commandant sur cette colonne colonne, ce qui n'est certainement pas ce dont vous avez besoin dans votre cas), donc une telle solution sera si fragile qu'elle la rendra presque inutile. Bonne chance, vous en aurez besoin (surtout si vous devez respecter un schéma qui bafoue totalement TOUS les principes des DB relationnelles!). –

0

Vous voulez pivot la table. Normalement, vous voulez au moins deux colonnes, cependant (une pour une clé et une pour une valeur) et vous avez également généralement besoin de savoir à l'avance quelles colonnes vous attendez dans les résultats.

+0

Je suis désolé de le dire, mais vous ne pouvez pas utiliser une fonction d'agrégat. Pivot nécessite une fonction d'agrégat –

Questions connexes