SQL 使用自联接查询

SQL query with a self join

我有一个 table 类似

create table test (
id [varchar](3),
var1 [varchar](2))

insert into test values (001, 'X1')
insert into test values (001, 'X2')
insert into test values (002, 'X3')
insert into test values (002, 'X4')
insert into test values (003, 'X5')
insert into test values (003, 'X6')

请注意 var1 是一些字符串,无法排序。

我需要 运行 一个给我结果为

的查询
id    var1       var2
 1     X1         X2
 2     X3         X4
 3     X5         X6

我试试这个查询

select distinct a.id, a.var1 as var1, b.var1 as var2 from test a join test b 
on a.id = b.id where a.var1 <> b.var1 order by a.id

但这给了我

id    var1       var2
 1     X1         X2
 1     X2         X1
 2     X3         X4
 2     X4         X3
 3     X5         X6
 3     X6         X5

有人可以帮助我进行此查询以获得所需的结果吗?

谢谢

如何使用 min()max():

select id, min(var1), max(var1)
from t
group by id;

SQL 表表示 无序 集,因此您的行没有顺序。您不妨将它们按 min()max().

指定的顺序排列

这个怎么样?

select distinct a.id, a.var1 as var1, b.var1 as var2 from test a join test b 
on a.id = b.id where a.var1 < b.var1 order by a.id
SELECT test.ID, Max(test.var1) AS var1, Min(test.var1) AS var2
FROM test
GROUP BY test.ID;
UNION ALL
SELECT test.ID, Min(test.var1) AS var1, Max(test.var1) AS var2
FROM test
GROUP BY test.ID
Order By test.ID;