Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用两个组的汇总,而不让它创建两个数据集?_Sql - Fatal编程技术网

Sql 如何使用两个组的汇总,而不让它创建两个数据集?

Sql 如何使用两个组的汇总,而不让它创建两个数据集?,sql,Sql,如何使用两个组的汇总,而不让它创建两个数据集 我需要包括姓名和ID,并按ID排序。我是按姓名汇总的,但我可以不这样做 SELECT SUM(salesFigures), productId, ISNULL(productName, ‘All’) AS ‘ProductName’ FROM MyTable GROUP BY productName WITH ROLLUP ORDER BY productId 当然,我得到“列'productId'在选择列表中无效,因为它既不包含在聚合函数中,

如何使用两个组的汇总,而不让它创建两个数据集

我需要包括姓名和ID,并按ID排序。我是按姓名汇总的,但我可以不这样做

SELECT SUM(salesFigures), productId, ISNULL(productName, ‘All’) AS ‘ProductName’
FROM MyTable

GROUP BY productName WITH ROLLUP

ORDER BY productId
当然,我得到“列'productId'在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”


我试图通过rollup子句将productId添加到group中,但结果集增加了一倍,一个用于productName,一个用于productId。当然,我不能对productId进行求和或聚合。

如果所有
productId
值都相同,则可以对该列应用
MIN
MAX
AVG
聚合:

SELECT SUM(salesFigures), 
       MIN(productId) productId , 
       ISNULL(productName, ‘All’) AS ‘ProductName’
FROM MyTable
GROUP BY productName WITH ROLLUP
ORDER BY productId
另一个选项是在子查询中进行汇总,并对产品ID进行反规范化:

SELECT B.Sales, A.productID, ISNULL(A.productName, ‘All’) AS ‘ProductName’
FROM (
    SELECT DISTINCT productID, ProductName FROM MYTable
    ) A
INNER JOIN (
    SELECT SUM(salesFigures) Sales, productname
    FROM MyTable
    GROUP BY productName WITH ROLLUP
    ) B
ON A.ProductName = B.ProductName
ORDER BY productId

“我不能对productId进行求和或聚合”-那么
MIN
呢<代码>平均值?您使用的是哪种数据库管理系统?什么是“数据集”?对不起,是MSSQL。Dataset=结果集,我在用VB思考,这就是数据的来源。我尝试了Min和Avg,但如果不将productId添加到汇总中,仍然无法进行排序,这会使返回的行数增加一倍。我可以用VB做排序,但我没想到我会这么做,对了,谢谢。一旦允许,我将接受作为答案。嗯,在添加最小值、最大值和平均值后,我仍然无法排序,除非我将productId放入组中,例如:“GROUP BY productName,productId WITH ROLLUP”,它仍然返回加倍的数据集。。。我得试试子查询。