1

顧客の注文を取得できるクエリがあります。

Select ID, OrderID, Item, Price from customerOrders
Where Order = 1

支払う最終的な金額を合計して下に表示する方法はありますが、たとえば、SQLクエリで必要なすべての詳細を表示することはできますか?

ID    |  OrderID |  Item  | Price
1     |   1      |  Book  | 9.99
2     |   1      |  DVD   | 12.99

                    total = 22.98

よろしくお願いします

4

4 に答える 4

1

COMPUTEを試すことができます

Select ID, OrderID, Item, Price from customerOrders
Where Order = 1
COMPUTE SUM(Price)
于 2012-11-07T18:19:24.300 に答える
1

技術的には、必要なものはロールアップ行と呼ばれます。SQL Serverには、このような場合に備えて特別な関数があり、句ROLLUP()内で呼び出されて使用されます。GROUP BY特定の状況では、クエリは基本的に次のようになります。

SELECT ID, OrderID, Item, SUM(Price) AS Price
FROM customerOrders
WHERE OrderID = 1
GROUP BY ROLLUP((ID, OrderID, Item))
;

このクエリのライブデモンストレーションはSQLFiddleで見ることができます。ROLLUP()、およびその他のGROUP BY関数の詳細については、 MSDNを参照してください。

于 2012-11-07T20:27:30.993 に答える
1

2つのステップ:

1、SUMを生成するには、UNIONALLを使用して結果セットにSUMを追加する必要があります。UNIONは、結果が変更されない場合でも、不要なDISTINCT操作を追加します。

Select ID, OrderID, Item, Price from customerOrders
Where [Order] = 1
UNION ALL
Select NULL, NULL, NULL, SUM(Price) from customerOrders
Where [Order] = 1
ORDER BY CASE WHEN ID IS NULL THEN 2 ELSE 1 END, ID;

2、必要な順序(一番下の合計)で並べ替えるには、識別子としてNULLIDを使用できます。

于 2012-11-07T18:21:32.237 に答える
0

これはあなたが必要とするものです:

   Select ID, OrderID, Item, Price from customerOrders
   Where Order = 1
Union
   Select NULL, NULL, NULL, (
      Select Sum(Price) from customerOrders
      Where Order = 1
      Group By  Order
   )

アップデート

結果が空の場合、合計は空ではなくゼロになります。更新されたコードを使用します。

乾杯

于 2012-11-07T18:01:12.280 に答える