2016-02-28 83 views
0

窗口函數我有以下查詢替代在Sybase

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數據庫不支持窗口的功能。

我試過如下:

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 

替換爲 「分區由」 與 「ORDER BY」 也沒工作。

請告知如何繼續。

我使用Sybase ASE的

確切的版本是:

的Adaptive Server Enterprise/15.7.0/EBF 21207 SMP SP50/P/Solaris上AMD64/OS 5.10/ase157sp5x /64分之3284位/ FBO/Thu Jul 11​​ 07:19:59 2013

+0

你的第一個版本是語法不正確,因爲沒有'爲了by'。 –

回答

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;