0

ここに私の SELECT ステートメントの小さなスニペットがあります:

SELECT CASE WHEN I.IsSimCheckout=1 THEN 
    SUM(DISTINCT SalePrice) ELSE SUM(SalePrice) END 
FROM InvoiceDetail TD WHERE TD.InvoiceID = D.InvoiceID

私がやろうとしていることはこれです:

SELECT CASE WHEN I.IsSimCheckout=1 THEN 
    SUM(TOP 1 SalePrice ORDER BY SalePrice) + SUM(TOP 1 SalePrice ORDER BY SalePrice DESC) ELSE SUM(SalePrice) END 
FROM InvoiceDetail TD WHERE TD.InvoiceID = D.InvoiceID

明らかに、後者の SQL がコンパイルされないことはわかっています。しかし基本的に、私がやろうとしているのは、I.IsSimCheckout が 1 の場合、すべてを合計するのではなく、最高の販売価格と最低の販売価格を足し合わせることです。うまくいけば、私がやろうとしていることは意味があり、明確です.

SQL Server 2008 を使用しています。

4

2 に答える 2

0
SELECT
.... 
FROM InvoiceDetail TD
OUTER APPLY
(
    SELECT TOP 1 SalePrice
    FROM D(?)
    WHERE TD.InvoiceID = D.InvoiceID
    ORDER BY SalePrice ASC 
) LP
OUTER APPLY
(
    SELECT TOP 1 SalePrice
    FROM D(?)
    WHERE TD.InvoiceID = D.InvoiceID
   ORDER BY SalePrice DESC
) HP
 WHERE TD.InvoiceID = D.InvoiceID

これが一般的な考え方です。SELECT ステートメントは残しておきます。

于 2013-10-01T06:38:42.797 に答える