Jas*_*ton 14 sql sql-server-2008
我想详细了解SQL教我的那一刻,我目前试图进行一些简单的销售使用报告SUM,COUNT,AVG和GROUP BY一个SQL Server 2008数据库中的功能.我已经设法按行获得每组的总数,计数和平均值.
如何按行获取所有组的总计?
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
Run Code Online (Sandbox Code Playgroud)
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
非常感谢
贾森
小智 20
您正在寻找ROLLUP运算符,它将在结果集的末尾添加一个总计行.如果要查找更复杂的聚合总计,请使用带有GROUP BY子句的ROLLUP或CUBE,例如@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
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但是仅供以后参考-您还可以通过使用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),
()
)
Run Code Online (Sandbox Code Playgroud)
这样,结果将具有按txt_orditems_pname分组的两行,并且根本没有分组。您可以指定更多分组集,即。查询部门和团队的平均薪水,部门和整个公司的总计也返回。