【问题标题】:Alternative to window functions in SybaseSybase 中窗口函数的替代方案
【发布时间】:2016-02-28 11:23:11
【问题描述】:

我有以下查询

  SELECT M_PILLAR,
       M_MXCOUNTRY,
       M_LIMIT_NETEXPOSURE,
       M_LIMIT_CURRENCY_NETEXPOSURE,
       M_MAXUTILIZATION_NETEXPOSURE,
       M_AVAILABLE_NETEXPOSURE,
       M_GROUP,
       M_ENTITIES,
       M_COUNTERPARTIES,
       rank() OVER (partition BY M_COUNTERPARTIES,M_PILLAR,M_MAXEXPOSURE_NETEXPOSURE) AS test
FROM X_LP_PSR_REP

但我的 Sybase DB 似乎不支持窗口函数。

我尝试了以下方法:

SELECT M_PILLAR,
   M_MXCOUNTRY,
   M_LIMIT_NETEXPOSURE,
   M_LIMIT_CURRENCY_NETEXPOSURE,
   M_MAXUTILIZATION_NETEXPOSURE,
   M_AVAILABLE_NETEXPOSURE,
   M_GROUP,
   M_ENTITIES,
   M_COUNTERPARTIES,
   rank() OVER (ORDER BY M_COUNTERPARTIES,M_PILLAR,M_MAXEXPOSURE_NETEXPOSURE) AS test FROM X_LP_PSR_REP

将“partition by”替换为“order by”也不起作用。

请告知如何进行。

我正在使用 Sybase ASE

确切的版本是:

Adaptive Server Enterprise/15.7.0/EBF 21207 SMP SP50 /P/Solaris AMD64/OS 5.10/ase157sp5x/3284/64-bit/FBO/2013 年 7 月 11 日星期四 07:19:59

【问题讨论】:

  • 您的第一个版本在语法上不正确,因为没有order by

标签: sql sap-ase rank window-functions


【解决方案1】:

您可以使用相关子查询来执行此操作(尽管效率要低得多)。对于rank()(使用第二个使用ORDER BY 且语法正确的示例),如下所示:

SELECT r.*,
       (SELECT 1 + COUNT(*)
        FROM X_LP_PSR_REP r2
        WHERE (r2.M_COUNTERPARTIES < r.M_COUNTERPARTIES) OR
              (r2.M_COUNTERPARTIES = r.M_COUNTERPARTIES AND r2.M_PILLAR < r.M_PILLAR) OR
              (r2.M_COUNTERPARTIES = r.M_COUNTERPARTIES AND r2.M_PILLAR = r.M_PILLAR AND r2.M_MAXEXPOSURE_NETEXPOSURE < r.M_MAXEXPOSURE_NETEXPOSURE)
       ) as test
FROM X_LP_PSR_REP r;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多