2

テーブル内の行を列 "値" で並べ替えます。ここで、Field = "order" で、行を ObjectId でグループ化します。

 Id | ObjectId | Field | Value
------------------------------
 1  |    1     | size  |  big
 2  |    1     | order |   2   //unsorted
 3  |    2     | size  | small
 4  |    2     | order |   1   //unsorted
 5  |    3     | size  | medium
 6  |    3     | order |   3   //unsorted

期待される結果:

 Id | ObjectId | Field | Value
------------------------------
 3  |    2     | size  | small
 4  |    2     | order |   1   //sorted
 1  |    1     | size  |  big
 2  |    1     | order |   2   //sorted
 5  |    3     | size  | medium
 6  |    3     | order |   3   //sorted
4

1 に答える 1

0

最初にサイズのフィールド値に参加する必要があります。

select t.*
from t join
     (select t.object_id, max(case when field = 'order' then value end) as ordering
      from t
      group by t.object_id
     ) tsum
     on t.object_id = tsum.object_id
order by tsum.ordering, t.object_id, id;

これにより、同じ「順序」が同じものすべてに割り当てられますobject_id

于 2013-07-01T11:22:32.180 に答える