0

我有一个结构有点像这样的表:

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

我已经厌倦了交叉连接、分组等各种想法,但都是徒劳的。有什么帮助吗?

4

1 回答 1

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 的两倍,即 < x.name 但只有当 a.date 和 x.dates 匹配时。因此需要交叉连接,但您不想简单地使用 <> 或 =

于 2013-07-10T21:21:12.377 回答