2017-11-11 6 views
1

私はいくつかの中間テーブルを持つU-SQLスクリプトを構築しています。私は列の1つの順序に基づいてROW_NUMBER()を割り当てたいと思いますが、その方法を理解することはできません。Azure/U-SQL - ORDER BY in ROW_NUMBER()

@t = SELECT * 
    FROM(
     VALUES 
     (1, "2010-01-01","TagName1", 30), 
     (2, "2010-01-01","TagName2", 5), 
     (2, "2010-01-02","TagName2", 7), 
     (2, "2010-01-02","TagName3", 6), 
     (3, "2010-01-03","TagName2", 15), 
     (1, "2010-01-01","TagName2", 2), 
     (1, "2010-01-01","TagName3", 1), 
     (3, "2010-01-04","TagName1", 2), 
     (3, "2010-01-04","TagName2", 4) 
    ) AS T(DeviceID, Date, TagName, dv); 

@t2 = SELECT DISTINCT(dv) as dv 
      , ROW_NUMBER() OVER() as LevelNumber 
     FROM @t 
     ORDER BY dv; 

私は上記のコードを実行した場合、それはOUTPUTステートメントにORDER BYを移動するために私に語ったが、これは動作しない場合のその後の操作でテーブルの内容が変更されます。

OVER()部分に列名を入れてみましたが、これもうまくいきません。

私はこのような何か希望:

dv   LevelNumber 
    1    1 
    2    2  
    4    3 
    5    4 

任意の提案を?

答えて

2

OVER句には、ORDER BYおよび/または句を含めることができます。

@output = 
    SELECT dv, 
      ROW_NUMBER() OVER(ORDER BY dv) AS LevelNumber 
    FROM 
    (
     SELECT DISTINCT dv 
     FROM @t 
    ) AS x; 
:あなたは私はあなたの結果を得ることができる最も近いが、このクエリを使用していたが、必要なロジックが私には100%明確ではありません
@t = SELECT * 
    FROM(
     VALUES 
     (1, "2010-01-01","TagName1", 30), 
     (2, "2010-01-01","TagName2", 5), 
     (2, "2010-01-02","TagName2", 7), 
     (2, "2010-01-02","TagName3", 6), 
     (3, "2010-01-03","TagName2", 15), 
     (1, "2010-01-01","TagName2", 2), 
     (1, "2010-01-01","TagName3", 1), 
     (3, "2010-01-04","TagName1", 2), 
     (3, "2010-01-04","TagName2", 4) 
    ) AS T(DeviceID, Date, TagName, dv); 


//@t2 = SELECT DISTINCT(dv) as dv 
//    , ROW_NUMBER() OVER() as LevelNumber 
//  FROM @t 
//  ORDER BY dv; 


@output = 
    SELECT DeviceID, 
      Date, 
      TagName, 
      dv, 
      ROW_NUMBER() OVER(ORDER BY dv) AS LevelNumber 
    FROM @t; 


OUTPUT @output TO "/output/output.csv" 
ORDER BY dv 
USING Outputters.Csv(); 

例えば

OUTPUTステートメントに ORDER BY句を移動することができます
関連する問題