Sybase将外部联接(* =或= *)更改为ANSI联接

时间:2019-06-18 10:52:15

标签: sql tsql sybase ansi

从Mysql迁移到Sybase数据库后,我必须重写一些代码。不幸的是,我找不到正确的方法,我举了其中一个代码的简短示例,它是由Business Object Universe设计人员自动编写的。主要是我想了解如何正确地更改这些右= *或左* =连接,以便我自己更改其他代码。原因是Sybase不允许一次选择使用ANSI和Transact-SQL。

试图将其仅更改为外部联接,但结果不正确,因为它提供了太多数据。

SELECT DISTINCT
  Y15YVF_FLEET_P.FLEET_NUM,
  AVG(Y15YVF_INVOICE.REVAL),
  Y15YVF_FLEET_P.LCTYP,
  Y15YVF_FLEET_P.DIVISION
FROM
  Y15YVF_CONTRACT INNER JOIN Y15YVF_FLEET_A ON (Y15YVF_FLEET_A.MANDT=*Y15YVF_CONTRACT.MANDT and Y15YVF_FLEET_A.FLEET_NUM=*Y15YVF_CONTRACT.FLEET_NUM and Y15YVF_FLEET_A.CTNR=*Y15YVF_CONTRACT.CTNR)
   INNER JOIN Y15YVF_VEHICLES ON (Y15YVF_VEHICLES.FLEET_NUM=Y15YVF_FLEET_A.FLEET_NUM and Y15YVF_VEHICLES.MANDT=Y15YVF_FLEET_A.MANDT)
   INNER JOIN Y15YVF_FLEET_P ON (Y15YVF_VEHICLES.FLEET_NUM=Y15YVF_FLEET_P.FLEET_NUM and Y15YVF_VEHICLES.MANDT=Y15YVF_FLEET_P.MANDT)
   INNER JOIN Y15YVF_INVOICE ON (Y15YVF_FLEET_A.MANDT=*Y15YVF_INVOICE.MANDT and Y15YVF_FLEET_A.FLEET_NUM=*Y15YVF_INVOICE.FLEET_NUM)

WHERE
  ( 
  Y15YVF_INVOICE.REDAT  >=  '20040601'
  AND  Y15YVF_VEHICLES.MANDT  !=  @variable('Stichtag:')
  AND  Y15YVF_FLEET_A.OWNSH  =  'L'
  AND  Y15YVF_CONTRACT.LEABEG  !=  '00000000'
  )
GROUP BY
  Y15YVF_FLEET_P.FLEET_NUM, 
  Y15YVF_FLEET_P.LCTYP, 
  Y15YVF_FLEET_P.DIVISION

我还添加了指向示例数据的链接,因为有太多数据不确定是否足以进行检查: Data

1 个答案:

答案 0 :(得分:0)

据我所知,你想要

Aspect Fit / Aspect Fill

使用表名和示例数据比较容易分辨。