2009-06-06 20 views
1

SQL Server 2005では、tbl_Infoというテーブルがあります。そこに私は情報を言う1つの列がある。SQL Server 2005/2000の行の転記

値は

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

とされ、行の値は次のようになります。

私の質問は、行col転位を作成する方法です。

所望の出力は、あなたがテーブル変数や一時テーブルを使用することができます

 
Name  Age  Sex 

Name1  Age1  Sex1 
Name2  Age2  Sex2 

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

になります。

アセンブリを使用してソリューションを提供しないでください。私は既にアセンブリを使用していたので、SQL Server 2000でも使用できるソリューションが必要です。

+0

は宿題のように見えます。 –

答えて

1

一般的な考え方は、あなたが順序を保証するために別の列を必要とするということですただ、0、1、2として挿入など

は今、あなたが望むSELECTは次のとおりです。

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 

は_aについてだけで動作します自分自身を "SQL"と呼ぶny_thing ;-)。例えば

、データがある場合:

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

SELECT上記の結果は次のとおり

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

他の列は使用できません。データベーススキーマには既にいくつかの制約が課されています。 それ以外の場合は、私は間違いなくあなたの解決策をとらえたでしょう。 –

+0

1つの列しかない場合は、順序を保証するものではありません。運が良ければ必然的に必要な順序列を合成する方法を見つけることができますが、単一列の表は決して堅牢で内在的な順序はありません(ただし、あなたのケースではあなたが必要としているものではありません)、そのような解決法はそれほど役に立たないほど壊れやすいでしょう。幸運にも、あなたはそれを必要とします(特に、リレーショナルDBのすべての原則を全面的に批判しているスキーマを尊重しなければならない場合)。 –

0

テーブルをpivotにしたいと思います。通常、少なくとも2つの列が必要です(キーと値の1つです)。また、一般的に、結果に期待している列を事前に知る必要があります。

CREATE TABLE foo (ord INT, col VARCHAR) 

ordをして:私たちはちょうど使用と言うことは、典型的には、いくつかの整数型の主キーになるだろうが、物事をシンプルに保つために -

+0

申し訳ありませんが、集計関数を使用することはできません。 ピボットに集計関数が必要 –