2017-10-22 9 views
2

私はMSSQLデータベースをMySQLに変換しようとしていますが、私のバージョンは5.7です。私はロードブロッキングを打った。MySQL変換ROW_NUMBER()OVER PARTITION

SELECT orderid, invs.[InvoiceID], invs.[InvoiceDate], 
invs.[InvoiceNumber], invs.[HasClientPaid], 
ROW_NUMBER() OVER (PARTITION by orderid,invs.invoicenumber,HasClientpaid ORDER BY orderid) AS DistNum 
FROM InvoiceLineItems Ilt 
JOIN Invoices Invs ON Ilt.InvoiceID= invs.InvoiceID 

ご協力いただければ幸いです。あなたが必要とする

SELECT 
     @row_num :=IF(@prev_value=concat_ws('',orderid, invs.invoicenumber, HasClientpaid),@row_num+1,1)AS RowNumber 
    , orderid 
    , invs.[InvoiceID] 
    , invs.[InvoiceDate] 
    , invs.[InvoiceNumber] 
    , invs.[HasClientPaid] 
    , @prev_value := concat_ws('',orderid, invs.invoicenumber, HasClientpaid) 
FROM InvoiceLineItems Ilt 
JOIN Invoices Invs ON Ilt.InvoiceID = invs.InvoiceID 
CROSS JOIN (SELECT @row_num :=1, @prev_value :=0) vars 
ORDER BY 
     orderid, invs.invoicenumber, HasClientpaid 
; 

:その後、@variablesを使用すると、効果を模倣する技術であるまで、あなたが

答えて

0

MySQLは、例えばバージョン8.xでrow_number()としてウィンドウ関数を(まだ生産準備)センターサポートするために開始されますありがとう3つのフィールドorderid, invs.invoicenumber, HasClientpaidを連結して元のパーティションを模倣し、その順序はこれらの3つの列でなければなりません。このためにはORDER BYが必須です。他の最終的な注文が必要な場合は、上記をサブクエリとして使用してください。

+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –

関連する問題