我无法在Sybase ASE中执行RANK功能

时间:2016-01-05 14:59:02

标签: sql sybase sybase-ase rank

同时使用RANK()OVER(按列_1按行列分组asc)作为Rank

它说" OVER"

附近的语法不正确

用于计算sybase中的等级的任何替代方法?

先谢谢。

CODE:

SELECT
BRN AS br_name, 
SUM(TGAB) AS gross_amt_base
from (
SELECT
    MB.BNAC AS BRN,
    MT.TGAB * MTTM.MQR AS TGAB
FROM
    dbo.MB MB,
    dbo.MT MT,
    dbo.MTTM MTTM,
    dbo.MPPGTT MPPGTT
WHERE
    MT.TEI IN (SELECT MAC.AAEI
                                  FROM
                                      dbo.MAC MAC,
                                      dbo.MEA MEA,
                                      dbo.MC MAC
                                  WHERE
                                      MAC.AASN = 'JPFA 5201   ' AND
                                      MAC.AL = 'en-us' AND
                                      MAC.CL = 'en-us' AND
                                      MAC.AAEI = MEA.ea_id AND
                                      MAC.CC = MEA.EBC) AND
    MT.TED >= '2012-03-01 00:00:00.000' AND
    MT.TED <= '2012-03-30 00:00:00.000' AND
    MT.TBC NOT IN
    (
        0,
        2,
        99,
        752,
        1000001,
        2000002,
        390003431
    )
    AND
    MB.BL = 'en-tx' AND
    (MT.TCI != 'Y' OR
     MT.TCD > '2012-03-30 00:00:00.000' OR
     MT.TCD < '2012-03-01 00:00:00.000' OR
     (MT.TOED < '2012-03-01 00:00:00.000' OR
      MT.TOED > '2012-03-30 00:00:00.000') AND
     NOT MT.TOED IS NULL) AND
    MTTM.MLL = 'en-us' AND
    MTTM.MTC = 7000 AND
    MTTM.MTP = 'Y' AND
    MTTM.MGO IN
    (
        'Purchases',
        'Sales'
    )
    AND
    ISNULL (MTTM.MAWF,
            'LINK') = ISNULL (MT.TAWF,
                              'LINK') AND
    MT.TGAB > 0 AND
    MB.br_code = MT.TBC AND
    MPPGTT.PTTC = MT.tr_tt_code AND
    MTTM.mtttm_tt_code = MPPGTT.PTTC) AS A
    GROUP BY BRN

2 个答案:

答案 0 :(得分:0)

如果您的Sybase版本不支持窗口函数(这是错误消息所示),那么您可以使用相关的子查询:

select t.*,
       (select 1 + count(*)
        from t t2
        where t2.column_1 = t.column_1 and
              t2.column_2 < t.column_2
       ) as therank
from t;

答案 1 :(得分:0)

在Sybase IQ中提供了rank_(Analytical)函数,但在ASE中不提供,因此对于后者,您必须以Gordon风格对其进行破解。