【问题标题】:SQL Server 2008 grand total using COMPUTE使用 COMPUTE 的 SQL Server 2008 总计
【发布时间】:2012-11-24 00:13:12
【问题描述】:

我有一个简单的表查询显示:

salesAreaId areaDescription Total
----------- --------------- -----------
N1          North           5
SE8         Southeast       3
SW7         Southwest       2
NE6         Northeast       2
NW5         Northwest       1
S3          South           1
W4          West            1
E2          East            1

(8 row(s) affected)

这是我的代码

SELECT st.salesAreaId, areaDescription,  
    COUNT(*) as Total
FROM store as st, salesArea as sa
WHERE st.salesAreaId = sa.salesAreaId
GROUP BY st.salesAreaId, areaDescription
ORDER BY 3 DESC
GO

我的问题是如何使用 COMPUTE 在总列下方添加总计行,我被教导在 ORDER BY 之后使用 COMPUTE

我不想使用 ROLLUP,是否需要某种内部 SELECT 才能单独使用 Total。 我读到的每个示例都说要像这样在 SUM 旁边键入列名

有什么建议吗?

【问题讨论】:

  • 拒绝 ROLLUP 的原因是什么?
  • @Nico 我现在不记得了,:/

标签: sql sql-server-2008


【解决方案1】:

试试这个:

SELECT st.salesAreaId, areaDescription,  
COUNT(*) as Total
FROM store as st, salesArea as sa
WHERE st.salesAreaId = sa.salesAreaId
GROUP BY st.salesAreaId, areaDescription
--order by would go here if needed - ordering by a constant won't have any effect though, so I've removed it from the statment
compute sum(count(*))

您可以将 sum 替换为任何聚合函数。 我已经使用 count(*) 作为你正在做的事情,因为你将它用于你的小计 - 但你可以用列名/任何需要的东西来替换它。

ps。查看您的数据,您似乎可能在每个区域的小计之后?如果是这样,试试这个:

SELECT st.salesAreaId
, areaDescription
, COUNT(*) as Total
FROM store as st
inner join salesArea as sa
on st.salesAreaId = sa.salesAreaId
GROUP BY st.salesAreaId, areaDescription
ORDER BY st.salesAreaId, areaDescription
COMPUTE sum(count(*)) BY areaDescription

【讨论】:

  • 是的,先生,我的总和显示在底部。无论如何在显示时将总和标签更改为不同的标签?
  • 我找不到选项(即使您有两个同名的聚合,您也会得到相同的列名,这令人惊讶)。然而,在研究这一点时,我发现 Compute 在 SQL 2012 中已被弃用:blog.sqlauthority.com/2012/04/02/…。调查差异的原因似乎是让您的总计与您的总计在同一列中。大概这就是 Compute By 被弃用的部分原因?
猜你喜欢
  • 2018-01-14
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 2013-09-16
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多