2011-10-24 3 views
0

SQL Server 2000で以下のコードを書く方法をお手伝いできますか?おかげSQL Server 2000の次のSQLフラグメントを書くには

WITH cte 
    AS (SELECT *, 
       (Row_number() OVER(ORDER BY productid, transactionid, 
        statusdate 
        DESC) 
        )AS 
       rownum 
     FROM @table), 
    cte2 
    AS (SELECT cte.*, 
       (CASE 
        WHEN cte.status = Isnull((SELECT t.status 
               FROM cte t 
               WHERE t.rownum = (cte.rownum + 1 
                   )), 
             '') 
        THEN 1 
        ELSE 0 
        END)AS rownum2 
     FROM cte) 
SELECT cte2.productid, 
     cte2.transactionid, 
     cte2.details, 
     cte2.status, 
     cte2.statusdate, 
     cte2.requestdate 
FROM cte2 
WHERE rownum2 = 0 
+0

何を試しましたか?何かを試してみて、他の人が編集や投票などをするために投稿してください。 –

+0

また、2005年の参照は何ですか?このコードはどこから来たのですか?しばらく時間を取って説明してください。より良い回答が得られます –

+0

SQL Server 2005には2000年には使用できないOVER()関数があります。このSQLはSQL Server 2000では実行されませんでした。 – Digbyswift

答えて

2

DigbySwift's answerは、ROW_NUMBERに問題があることに言及し、あなたは最初にその解決する必要があります。あなたは彼の答えにアイデアを使用することができます。また、このような類似の質問の答えになります:

しかしまた別の問題があります:SQL Server 2000人のdoesnのCTEをサポートしていません(WITH ... AS ...)。

これを解決するには、WITH句を削除し、CTEの定義を使用する場所に移動して、CTEの代わりに副選択を使用します。例えば

CTEを使用して、このクエリ:

WITH T1 AS (SELECT a,b,c FROM ...) 
SELECT * FROM T1 

は次のようになります。

SELECT * 
FROM (
    SELECT a,b,c FROM ... 
) AS T1 

うまくいけば、あなたが始めるには十分です。

+0

ははい、副問い合わせは、人々はまた、私はROW_NUMBER()関数はまた、2000年に定義されていないと思うSO :) –

+0

に投稿する多くの問題を解決するため、ここでは私の完全なクエリ –

+0

です私は..感謝を変換するために、完全なクエリをリンクしている、 –

2

あなたは再アドレス/選択初期CTEを移動する必要がありますので、2000年にはOVER()関数は、ありません。既にテーブル変数@tableを持っているので、行番号を含むようにこれを修正し、ID列を追加します。

次に、サブクエリを使用して、cte2から必要なものを抽出できます。

+0

のhttp:/ /stackoverflow.com/questions/7875247/convert-sql-server-2005-to-2000 –

関連する問題