0

我有一个查询,在某些情况下是 When 子句。

我使用 then 函数来检查其他行。

问题是,我查了一下,按表的顺序,没有顺序。所以在我的结果中它并不总是处于良好状态。

 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, 

我有一个可以订购的相关日期。但问题是错误的行可能有“在同一地址”文本,因为我没有选择它领先(或滞后)的顺序。所以,这可能是结果:

我的方向,我的地址 my salle .... 在同一个地址或在同一个地址 .... 我的方向,我的地址 my salle

第二个明显错误

在进入我的案例之前,我是否可以选择按日期对行进行排序,所以它总是第二个,即带有“在同一地址”的文本。

这应该是

我的方向,我的地址我的销售第一次约会....在同一地址第二次约会而不是

在同一地址日期....我的方向,我的地址我的销售第二个日期

谢谢你。

4

1 回答 1

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
于 2013-11-14T13:09:21.960 回答