2017-04-12 5 views
1

私は次のことを実現したいと思います:既存の注文のあるテーブルで、どのようにOVER(ORDER BY())を使用しますか?

SELECT DISTINCT 
    id AS Col0, 
    'constant' AS Col1 
    IIF(z < 0, x, 0) AS Col2, 
    IIF(z > 0, x, 0) AS Col3, 
    SUM(x) OVER(ORDER BY Col2 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Col4] 
FROM y 
ORDER BY Col2 DESC 
OFFSET 0 ROWS 
FETCH NEXT 500 ROWS ONLY 

私は累計列を作るしようとしています。問題は、テーブルのORDERBY()OVER()に動的に使用したいのですが、OVER(ORDERBY())はインデックスベースに対応しておらず、Col1を列として受け入れません。

どうすればいいですか?後でコードで簡単に何かできるのですが、純粋なSQLでこれを行う方法を学びたいと思っています。

+0

を作成するために使用される式を使用してOrder By Col2を交換しますが、サンプル入力して、必要な出力を表示することができますか? 'OVER'節に現れる' ORDER BY'は、ウィンドウ関数 'SUM()'と関係し、結果セットの順序ではないことに注意してください。 –

答えて

1

だけCol2に

SELECT DISTINCT 
    id AS Col0, 
    'constant' AS Col1 
    IIF(z < 0, x, 0) AS Col2, 
    IIF(z > 0, x, 0) AS Col3, 
    SUM(x) OVER(ORDER BY IIF(z > 0, x, 0) DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Col4] 
FROM y 
ORDER BY Col2 DESC 
OFFSET 0 ROWS 
FETCH NEXT 500 ROWS ONLY 
+0

さて、私はそれを得る。しかし、私が一定の価値を超えて注文しなければならないなら、それはそれを受け入れないでしょう。しかし、私はおそらくそれを回避する方法を見つける必要があります。 – Perfection

関連する問題