2017-11-08 14 views
2

私はテーブルを持っている:各行の列を並べ替えることはできますか?

create table SomeTable( 
    N1 int(11) not null default 0, 
    N2 int(11) not null default 0, 
    N3 int(11) not null default 0, 
    N4 int(11) not null default 0, 
    N5 int(11) not null default 0 
) 

表には、このように1行しか、あります

N1 : 1 
N2 : 2 
N3 : 5 
N4 : 0 
N5 : 3 

私はselect * from tableを照会すると、私が手:

N1, N2, N3, N4, N5 
1, 2, 5, 0, 3 

をすることは可能ですこのようなデータをソートしますか?

N3, N5, N2, N1, N4 
5, 3, 2, 1, 0 
+1

'*選択second_colのdesc' – Bhargav

+1

によってテーブルの順序からこの種の問題は、凶悪なデザイン – Strawberry

答えて

0

残念ながら、あなたはあなたが...あなたは、このような選択された列の順序を指定することができ、行を注文することができますが、列を注文することはできませんそれを行うことはできません。

select N3, N5, N2, N1, N4 from SomeTable 
+1

の症候性であるよろしいです[?](https://stackoverflow.com/a/47173658/256196) – Bohemian

+1

はい)))私はそれがハッキーな方法で可能であることを知っていますが、実際のプロジェクトでは間違った方法です...そして、大きく洗練されたクエリ - 何かが間違っているという兆候です... –

0

あなたが動的に列に影響を与えることができませんができますが、値を注文することができます。

select 
    greatest(N1, N2, N3, N4, N5) as col1, 
    case greatest(N1, N2, N3, N4, N5) 
     when N1 then greatest(N2, N3, N4, N5) 
     when N2 then greatest(N1, N3, N4, N5) 
     when N3 then greatest(N1, N2, N4, N5) 
     when N4 then greatest(N1, N2, N3, N5) 
     when N5 then greatest(N1, N2, N3, N4) 
    end as col2, 
    case greatest(N1 + N2, N1 + N3, N1 + N4, N1 + N5, N2 + N3, N2 + N4, N2 + N5, N3 + N4, N3 + N5, N4 + N5) 
     when N1 + N2 then greatest(N3, N4, N5) 
     when N1 + N3 then greatest(N2, N4, N5) 
     when N1 + N4 then greatest(N2, N3, N5) 
     when N1 + N5 then greatest(N2, N3, N4) 
     when N2 + N3 then greatest(N1, N4, N5) 
     when N2 + N4 then greatest(N1, N3, N5) 
     when N2 + N5 then greatest(N1, N3, N4) 
     when N3 + N4 then greatest(N1, N2, N5) 
     when N3 + N5 then greatest(N1, N2, N4) 
     when N4 + N5 then greatest(N1, N2, N3) 
    end as col3, 
    case least(N1, N2, N3, N4, N5) 
     when N1 then least(N2, N3, N4, N5) 
     when N2 then least(N1, N3, N4, N5) 
     when N3 then least(N1, N2, N4, N5) 
     when N4 then least(N1, N2, N3, N5) 
     when N5 then least(N1, N2, N3, N4) 
    end as col4, 
    least(N1, N2, N3, N4, N5) as col5 
from table 

これは、テーブルの行の任意の数(だけでなく、1、あなたの場合のように)で動作します。

+0

実際のプロジェクトでこのクエリを使用しますか?) –

+0

さらに、あなたのクエリは間違っています(あなたのクエリのように、 'N3、N5、N2、N1、N4'のように' col1、col2、col3、col4、col5'のように値に応じて1レコードと適切なカラム名を選択する必要があります。 –

+0

@vladは私の答えの最初の文を読んでください – Bohemian

関連する問題