0

如何将 WITH ROLLUP 与两个组一起使用,而不是让它创建两个数据集?

我需要包括名称和 ID 并按 ID 排序。我是按名字卷起来的,但没有那个我也能活下去。

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

GROUP BY productName WITH ROLLUP

ORDER BY productId

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

我尝试将 productId 添加到 group by rollup 子句,但结果集加倍,一组用于 productName,一组用于 productId。当然,我不能求和或以其他方式汇总 productId。

4

1 回答 1

1

如果所有productId值都相同,您可以将MINMAXAVG聚合应用于该列:

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
于 2013-10-21T18:44:13.250 回答