【发布时间】:2015-12-15 13:57:49
【问题描述】:
使用 Oracle,我希望执行以下查询,但我想知道是否有更“智能”的方式来执行此操作。
Select * from Sales Sales1
left join Sales Sales2 on Sales2.val = Sales1.val
left join Sales Sales3 on Sales3.val = Sales2.val
left join Sales Sales4 on Sales4.val = Sales3.val
left join Sales Sales5 on Sales5.val = Sales4.val
...
这是我的示例数据的样子
customer number | acct | start balance | open date | prev account
a 1 100 01-01-15 b-1
b 1 80 03-04-14
c 2 200 04-11-14 c-1
c 1 150 06-12-15
d 1 600 08-16-15
e 3 400 12-19-15 e-2
e 2 150 10-21-14 e-1
e 1 100 01-18-13
结果集如下所示:
Customer | start | open | prevStart_01 | prevOpen_01 | prevStart_02 | prevOpen_02
a-1 | 100| 01-01-15| 80 | 03-04-14 | |
c-2 | 200| 04-11-14| 150 | 06-11-14 | |
e-3 | 400| 12-19-15| 150 | 10-21-14 | 100| 01-18-13
如您所见,我需要根据结果继续加入另一条销售记录,并且我需要继续这样做,直到返回一个空的结果集。我当前的场景是运行查询并查看 sales5、sales6、sales7 等中是否有值。
【问题讨论】:
-
@xQbert 我需要每个连接中的几列。
-
查看分层查询后可能无济于事。然而,取消数据透视可能。但是,我需要知道相关字段和示例数据的表结构以及预期的结果。这是example unpivot,它可能对您有帮助,也可能对您没有帮助,因为这个问题对预期结果仍然有点模糊。我看到的问题是数据没有标准化,这使得查询需要额外的连接。但是为什么你首先需要连接呢?提供样本数据预期结果。
-
@xQbert 我添加了一些示例数据和我正在寻找的内容,但我认为您的答案与我正在寻找的内容接近。
-
啊,那么您是在动态枢轴之后,而不是未枢轴。您想在 prevstart 和 prevOpen 上旋转数据。这是一个示例:stackoverflow.com/questions/11987067/…
-
@xQbert 这里的 IN 子句会是什么样子?匹配列是客户编号和帐户的串联。
标签: oracle