【问题标题】:I am not able to perform RANK function in Sybase ASE我无法在 Sybase ASE 中执行 RANK 功能
【发布时间】:2016-01-05 14:59:02
【问题描述】:

同时使用 RANK () OVER(Partition by column_1 order by column_2 asc) 作为排名

它在“OVER”附近显示不正确的语法。

在sybase ase中计算排名的任何替代方法??

提前致谢。

代码:

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

【问题讨论】:

  • 需要在OVER和(Partiton...之间留一个空格...

标签: sql sybase sap-ase rank


【解决方案1】:

如果您的 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;

【讨论】:

  • 谢谢戈登!现在我的错误是“不允许从 univarchar 到十进制的隐式转换”。我想我需要使用转换函数,因为 column_1 是 univarchar 而 column_2 是浮点数。
  • @Novice_Techie 。 . .这应该不会产生转换错误。这些列正在与它们自身进行比较——所以类型是相同的。
  • 我已经粘贴了我的实际代码。我需要在 Gross_Amt_base 上有一个排名。
  • @Novice_Techie 。 . .您的错误与您关于计算排名的问题无关。
  • 是的,戈登...我在上面粘贴了我的代码。我需要根据gross_amt_base order by br_name asc 来计算Rank。
【解决方案2】:

Analytical rank() 函数在 Sybase IQ 中可用,但在 ASE 中不可用,因此对于后者,您必须像 Gordon 一样破解它。

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2014-08-29
    • 2016-07-19
    • 1970-01-01
    • 2020-12-19
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多