我有一个查询,有些情况是When子句。
我使用函数引导(或滞后)检查其他行。
问题是,我按照表格的顺序检查它,没有订单。因此,我的结果并不总是处于良好状态。
CASE
WHEN Lead(s.id_location, 1, NULL) OVER (ORDER BY s.id_location) = s.id_location THEN 'at the same address '
ELSE '\par \tab ' ||s.dir || '\par \tab '|| s.address || '\par \tab salle ' || s.lib_ || '\par \tab '|| s.etage
END AS adresscomplete,
我有一个可以订购的相关日期。但 问题是错误的行可以有“在同一地址”的文本,因为我没有选择它导致(或滞后)的顺序。 所以,这可能是结果:
我的方向,我的地址我的同事......在同一个地址 要么 在同一地址....我的方向,我的地址我的salle
第二个是明显错误的
在进入我的案例之前,我可以选择按日期订购行,所以它总是第二行,它将与“在同一地址”文本一起订购。
这应该是
我的方向,我的地址我的第一次约会....在同一地址第二次约会 而不是
在同一地址日期....我的方向,我的地址我的salle第二次约会
谢谢。
答案 0 :(得分:1)
看起来没问题。在显示结果记录时,请确保使用相同的顺序:
SELECT ...
CASE
WHEN LAG(s.id_location) OVER (ORDER BY s.id_location) = s.id_location
THEN 'at the same address '
...
FROM ...
WHERE ...
ORDER BY s.id_location; -- <== This is necessary to show your results ordered
编辑:为什么它会引导?你希望LAG看到上一行已经有了这个地址,以便显示'在同一地址'。
编辑:要按日期(以及日期内的位置)订购,请使用以下声明。我截断日期是为了删除时间部分以防万一。
SELECT ...
CASE
WHEN LAG(s.id_location) OVER (ORDER BY TRUNC(s.thedate), s.id_location) = s.id_location
THEN 'at the same address '
...
FROM ...
WHERE ...
ORDER BY TRUNC(s.thedate), s.id_location; -- <== This is necessary to show your results ordered