我的表格结构有点像这样:
date name marks
x a 4
y a 2
x b 2
y b 7
x c 8
y c 6
x d 9
y d 6
我想执行所有行的组合,但是,在执行组合时,应将name
视为一个。输出必须如下:
date name marks x.date x.name x.marks
x a 4 x b 2 # a & b
y a 2 y b 7
x a 4 x c 8 # a & c
y a 2 y c 6
x a 4 x d 9 # a & d
y a 2 y d 6
x b 2 x d 9 # b & c
y b 7 y d 6
x b 2 x c 8 # b & d
y b 7 y c 6
x c 8 x d 9 # c & d
y c 6 y d 6
我已经厌倦了各种想法,比如交叉加入,分组等,但都是徒劳的。有什么帮助吗?
答案 0 :(得分:1)
Select a.date adate, a.name aname, a.marks amark,
x.date xdate, x.name xname, x.marks xmarks
FROM A a, a x
where A.name < x.Name and a.date = x.date
order by aname, xname, adate, xdate
这是一个工作演示的小提琴。 http://sqlfiddle.com/#!2/105f0/19/0
但是将来展示你的作品。发布您尝试过的查询,以便人们可以指出正确的方向。
这里的诀窍是你希望A.name的两倍&lt; x.name但仅在a.date和x.dates匹配时。因此需要交叉连接,但您不想简单地使用&lt;&gt;或=