假设我有一个看起来像这样的表
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。
答案 0 :(得分: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
答案 1 :(得分: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调用。