1

次のようなテーブルがあります。

InvoiceNumber   AccountNumber   SumAmount
---------------------------------------------
1765            4150            20687.5000
1765            1100            20687.5000
1766            4150            41895.0000
1766            7730               20.0000
1797            4150                0.0000
1797            7730               20.0000
1797            1100             6652.3400
1797            4990             6652.3400

次のクエリによって生成されます。

SELECT InvoiceNumber
    ,AccountNumber
    ,SUM(Amount) AS SumAmount
FROM vINVOICE_TABLE
GROUP BY InvoiceNumber
    ,AccountNumber
ORDER BY InvoiceNumber

このロジックを適用したい:

  • ならSumAmount_Account 1 > SumAmount_Account2、取るAccount1
  • の場合SumAmount_Account 1 == SumAmount_Account2、番号の大きいアカウントを取得します

したがって、結果は次のようになります。

InvoiceNumber   AccountNumber
---------------------------------
1765            4150
1766            4150
1797            4990
4

1 に答える 1

3

これならできる。

SELECT InvoiceNumber, AccountNumber
FROM 
(
    SELECT  
        Row_Number() OVER(
            Partition BY InvoiceNumber  
            ORDER BY SUM(Amount) DESC, AccountNumber DESC
        ) rowNumber,
        InvoiceNumber,
        AccountNumber
    FROM vINVOICE_TABLE
    GROUP BY InvoiceNumber, AccountNumber 
)inv
WHERE rowNumber = 1
于 2012-11-16T17:32:30.447 に答える