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 子句对行重新排序。我认为它不能推广到超过 2 列,除非通过编写一个用户定义的 C 函数从 sqlite 调用。

于 2012-07-14T07:36:01.467 回答