如何在两个组中使用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。
答案 0 :(得分:1)
如果所有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