1

いくつかの列を持つテーブルがあり、そのうちの 4 つは単なる一般的な整数値 (num1、num2、num3、num4) であり、データのソースにはこれらの値がランダムな順序で含まれています。PHP では、行をフェッチし、4 つの int を配列に割り当て、配列をソートし、ソートされた値を割り当てて、行を保存します。これをSQLで実行したいと思います。したがって、次のようなテーブルで

id, num1, num2, num3, num4
1    6      2    9     1
2    12     3    8     4

...

結果を出してほしい

id, num1, num2, num3, num4
1     1     2     6     9
2     3     4     8    12

...

私は考えることができるすべてをGoogleで検索し、Mysql refマニュアルを精査しましたが、これを行う方法を見つけることができないようです. 何か考えがありますか、それともphpスクリプトを書くだけですか?

4

1 に答える 1

0

それはアンピボット、ソート、ピボットですが、最後に mysql ではないと聞いたので、おそらく

Set @position = 0
CREATE TEMPORARY TABLE OrderedUnpivot AS (
  Select Id,@position = @position + 1, @position % 4 as Position, Value From
  (
    Select Id,Position,Value From
    (
       select Id, 1 as Position, num1 as Value
       Union
       select Id, 2, num2
       union
       select Id, 3, num3
       union
       select Id, 4, num4
    ) depivot 
    Order by Id, Value
  )
Select ID,V1.Value as Num1, V2.Value as Num2, V3.Value as Num3, V4.Value as Num4 
From OrderedUnpivot v1
Inner join OrderedUnpivot v2 ON v1.Id = v2.ID
Inner join OrderedUnpivot v3 ON v1.Id = v3.ID
Inner join OrderedUnpivot v4 ON v1.Id = v4.ID

面倒ですが、考えさせられます。ああ、テストも構文チェックもされていません。

于 2012-12-12T01:00:28.877 に答える