0

複数のテーブルの列があり、これらすべての列のデータ型が整数です

主キー列以外のデータ行(列ではなく(並べ替えではなく))をソートしたい

例えば

column1(pk)   column2         column3         column4          column5
1             6               5               3                1
2             10              2               3                1
3             1               2               4                3

この結果を得るにはどうすればよいですか

column1(pk)   column2         column3         column4          column5
1             1               3               5                6
2             1               2               3                10
3             1               2               3                4

すぐに助けてください..それは可能ですか?? または不可能??? 不可能な場合、並べ替えに関係なく、どうすれば同様の結果を得ることができますか

4

3 に答える 3

1

どのデータベースを使用していますか? データベースの機能は重要です。次に、これはデータ構造の問題を示唆しています。並べ替える必要があるものは、通常、別のエンティティになります。. . つまり、テーブル内の個別の行です。この投稿の残りの部分では、質問に答えます。

データベースがピボット/アンピボットをサポートしている場合、次のことができます。

(1) データのピボットを解除して、 , , の形式で取得します。 (2) 値の順序に基づいて、row_number() を使用して新しい列を割り当てます。(3) row_number() を使用して、varchar の新しい列名を作成します。(4) 新しい列を使用してデータを再度ピボットします。

この機能が利用できない場合は、同様のことを行うことができます。

まず、データを行に変更します。

(select id, 'col1', col1 as val from t) union all
(select id, 'col2', col2 from t) union all
. . .

これをバイローと呼びます。次のクエリは、行番号を追加します。

select br.*, row_number() over (partition by id order by val) as seqnum
from byrow br

これをサブクエリに入れてピボットを解除します。最終的な解決策は次のようになります。

with byrow as (<the big union all query>)
select id,
       max(case when seqnum = 1 then val end) as col1,
       max(case when seqnum = 2 then val end) as col2,
       ...
from (select br.*, row_number() over (partition by id order by val) as seqnum
      from byrow br
     ) br
group by id
于 2012-05-11T14:37:10.350 に答える
0

SQL Server のピボット機能を使用して、行を列に変換できます。そこに並べ替えを適用し、アンピボットを使用して列を行に再度変換します。

于 2012-05-11T14:24:31.327 に答える
0

PIVOT を使用した良い例を次に示します。これをニーズに合わせて調整できるはずです。

http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx

于 2012-05-11T14:27:21.150 に答える