2012-04-29 9 views
8

することにより、グループを使用して総計を取得します。私は、行ごとに各グループの合計、数、平均を得ることができました。は、私は現時点では自分自身SQLについての詳細を教えしようとしていますし、現在のSQL Server 2008データベース内<code>SUM</code>、<code>COUNT</code>、<code>AVG</code>と<code>GROUP BY</code>機能を使用して報告するいくつかの簡単な販売を実施しようとしています

すべてのグループの合計を行単位で取得するにはどうすればよいですか?これまで

SQL:

SELECT 
    SUM(dbo.tbl_orderitems.mon_orditems_pprice) AS prodTotal, 
    AVG(dbo.tbl_orderitems.mon_orditems_pprice) AS avgPrice, 
    count(dbo.tbl_orderitems.uid_orditems_prodid) AS prodQty, 
    dbo.tbl_orderitems.txt_orditems_pname 
FROM 
    dbo.tbl_orderitems 
INNER JOIN 
    dbo.tbl_orders 
    ON (dbo.tbl_orderitems.uid_orditems_orderid = dbo.tbl_orders.uid_orders) 
WHERE 
    dbo.tbl_orders.uid_order_webid = 
     <cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#"> 
    AND dbo.tbl_orders.txt_order_status = 
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.sale_status#"> 
GROUP BY 
    dbo.tbl_orderitems.txt_orditems_pname 
 
Product       Qty  Gross  Avg 

Westbury Climbing Frame   17  8,023.00  471.94 
Sandpoint Deluxe Climbing Frame 34  36,146.00 1,063.12 
Roseberry Climbing Frame   9  7,441.00  826.78 
Ridgeview Texas Climbing Frame 10  6,990.00  699 
Selwood Picnic Table    9  489.92  54.44 

I need the Totals of qty column and gross column 

感謝

ジェイソン

+1

出力の例を挙げることはできますか? – Lock

+0

['GROUPING SETS'](http://technet.microsoft.com/en-us/library/bb510427(v=sql.100).aspx) –

+0

を参照してください。申し訳ありません! –

答えて

13

結果セットの最後に総計行を追加するROLLUP演算子を探しています。あなたは、より複雑な集計合計を探しているなら、そのような私は、これは古い質問ですけど、ただ今後の参考のため@MartinSmithまたはAggregation WITH ROLLUP

SELECT 
    SUM(dbo.tbl_orderitems.mon_orditems_pprice) AS prodTotal, 
    AVG(dbo.tbl_orderitems.mon_orditems_pprice) AS avgPrice, 
    count(dbo.tbl_orderitems.uid_orditems_prodid) AS prodQty, 
    dbo.tbl_orderitems.txt_orditems_pname 
FROM 
    dbo.tbl_orderitems 
INNER JOIN 
    dbo.tbl_orders ON (dbo.tbl_orderitems.uid_orditems_orderid = dbo.tbl_orders.uid_orders) 
WHERE 
    dbo.tbl_orders.uid_order_webid = <cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#"> 
    AND dbo.tbl_orders.txt_order_status = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.sale_status#"> 
GROUP BY 
    dbo.tbl_orderitems.txt_orditems_pname 
WITH ROLLUP 
+5

ちょうど1つの注記: 'WITH ROLLUP'と' WITH CUBE'機能は廃止され、回避されることが推奨されています。 (このマニュアルページの*非ISO準拠の構文*のセクションを参照してください(http://msdn.microsoft.com/en-us/library/ms177673.aspx "GROUP BY(Transact-SQL)")。)代わりに 'ROLLUP()'を使うことができます: 'GROUP BY ROLLUP(dbo.tbl_orderitems.txt_orditems_pname)'。 –

+0

がうまく動作し、マーティン・スミスのロールアップによる集計に関する情報は、私の次のステップには良いことです。 –

2

別の選択では、あなたの選択をラップと列をまとめます。

4

が提供するリンクとして、GROUP BY句にROLLUPまたはCUBEを使用します - GROUPING SETSを使用して、グループ化プロセスをより詳細に制御することもできます。たとえば:

SELECT 
    SUM(dbo.tbl_orderitems.mon_orditems_pprice) AS prodTotal, 
    AVG(dbo.tbl_orderitems.mon_orditems_pprice) AS avgPrice, 
    count(dbo.tbl_orderitems.uid_orditems_prodid) AS prodQty, 
    COALESCE(dbo.tbl_orderitems.txt_orditems_pname, 'TOTAL') 
FROM 
    dbo.tbl_orderitems 
INNER JOIN 
    dbo.tbl_orders 
    ON (dbo.tbl_orderitems.uid_orditems_orderid = dbo.tbl_orders.uid_orders) 
WHERE 
    dbo.tbl_orders.uid_order_webid = 
     <cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#"> 
    AND dbo.tbl_orders.txt_order_status = 
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.sale_status#"> 
GROUP BY GROUPING SETS (
    (dbo.tbl_orderitems.txt_orditems_pname), 
    () 
) 

この方法では、結果はtxt_orditems_pnameによってグループ化された両方の行を持って、そしてまったくグループ化となります。より多くのグループ化セットを指定することができます。部門とチーム全体の平均給与のクエリが返されます。

関連する問題

 関連する問題