0

このようなテーブルがあるとします

ATT A | ATT B
-------------
A     | B
D     | C
E     | F
H     | G

代わりに、次のようなテーブルが必要です。

ATT A | ATT B
-------------
A     | B
C     | D
E     | F
G     | H

どうすればそれを行うことができますか?私はSQLiteを使用しています。

4

2 に答える 2

2

SQL Server にはcase .. end、SQL ステートメントでインラインで使用できる式があります。SQLite も同じ構文を使用していると思います。これは、SQL Server で要求したことを行います。

create table #temp (AttA char(1), AttB char(1))

insert into #temp valueS ('A', 'B'), ('D', 'C'), ('E', 'F'), ('H', 'G')

select * from #temp

select case when AttA < AttB then AttA else AttB end as AttA,
       case when AttB > AttA then AttB else AttA end as AttB
from   #temp

drop table #temp
于 2012-07-13T23:06:41.013 に答える
1

列の型が同じで、並べ替える列が 2 つだけあると仮定すると、min/max 関数に頼ることができます。sqlite では、複数のパラメーターが指定されている場合、これらの関数は複数の行からデータを集計しません。

create table mytable( ATTA char, ATTB char );
insert into mytable values ('A', 'B');
insert into mytable values ('D', 'C');
insert into mytable values ('E', 'F');
insert into mytable values ('H', 'G') ;

select min(ATTA,ATTB),max(ATTA,ATTB) from mytable order by 1,2 ;
A|B
C|D
E|F
G|H

min/max 関数は、列の値を並べ替えます。order by 句は行を並べ替えます。sqlite から呼び出されるユーザー定義の C 関数を記述することを除いて、2 つ以上の列に一般化することはできないと思います。

于 2012-07-14T07:36:01.467 に答える