如何在两个组中使用WITH ROLLUP而不创建两个数据集?

时间:2013-10-21 18:40:21

标签: sql

如何在两个组中使用WITH ROLLUP而不创建两个数据集?

我需要包含名称和ID,并按ID排序。我按名字滚动,但我可以没有那个。

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

GROUP BY productName WITH ROLLUP

ORDER BY productId

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

我尝试通过rollup子句将productId添加到组中,但它将结果集加倍,为productName设置了一个,为productId设置了一个。当然我不能总结或以其他方式汇总productId。

1 个答案:

答案 0 :(得分: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