Sql server SQL Server 2008-总和

Sql server SQL Server 2008-总和,sql-server,sum,Sql Server,Sum,我已经成功地编写了以下查询,它返回我需要的结果,以查看建筑物中楼层的占用率和容量 select fma0.bldgcode, fma0.floorcode, sum(fma0.occ) as Occupancy, sum(CASE WHEN FMA0.SPACETYPE like 'A-OFF-%' OR FMA0.SPACETYPE like 'A-WKS-%' THEN FMA0.CAPACITY ELSE 0 END) as Capacity from fma0

我已经成功地编写了以下查询,它返回我需要的结果,以查看建筑物中楼层的占用率和容量

select 
fma0.bldgcode, 
fma0.floorcode, 
sum(fma0.occ) as Occupancy, 
sum(CASE WHEN FMA0.SPACETYPE like 'A-OFF-%' OR 
    FMA0.SPACETYPE like 'A-WKS-%' THEN FMA0.CAPACITY 
    ELSE 0 END) as Capacity
from fma0 
where fma0.bldgcode = 'tst01' 
group by fma0.bldgcode, fma0.floorcode 
order by fma0.bldgcode, fma0.floorcode
但是为了得到占用率/容量之和的另一列,我需要添加什么

Thks


FTD

另一种选择是使用CTE,如下所示。注意,到目前为止,其他答案给出的是SumOccupance+SUMcapacity:

WITH CTE_SUMS ([bldgcode], [floorcode], [Occupancy], [Capacity])
AS  (
    SELECT 
        fma0.bldgcode AS [bldgcode], 
        fma0.floorcode AS [floorcode], 
        sum(fma0.occ) AS [Occupancy], 
        sum(CASE WHEN FMA0.SPACETYPE like 'A-OFF-%' OR 
            FMA0.SPACETYPE like 'A-WKS-%' THEN FMA0.CAPACITY 
            ELSE 0 END) AS [Capacity]
    FROM fma0 
    WHERE fma0.bldgcode = 'tst01' 
    GROUP BY fma0.bldgcode, fma0.floorcode
    )
SELECT [bldgcode], [floorcode], [Occupancy], [Capacity], ([Occupancy] / [Capacity]) AS [Sum]
FROM CTE_SUMS

这将基本上为您提供已计算分组的SumOccupation/SUMcapacity。

如果在else子句中使用fma0.acc而不是0来计算容量,您会得到所需的吗?感谢快速回复timus,但是我现在遇到一个SQL错误:ORDER BY子句在视图、内联函数、派生表中无效,子查询和公共表表达式,除非也指定了TOP或FOR XML,否则将ORDER移到tmp行之后,并按照原始select.-1命名ORDER字段,因为您复制了答案。。这不是您参与stackoverflow的方式。。如果你得到答案,请继续练习向上投票和接受答案。我从Timus那里复制了原始答案,但将顺序逐行移动到正确的位置,因为原始答案给出了评论中所述的错误。自那以后,Timus将他的答案编辑为相同!同样如评论中所述……请在批评之前阅读
SELECT 
bldgcode,
floorcode,
Occupancy,
Capacity ,
Occupancy+Capacity AS allsum
FROM(
select 
fma0.bldgcode, 
fma0.floorcode, 
sum(fma0.occ) as Occupancy, 
sum(CASE WHEN FMA0.SPACETYPE like 'A-OFF-%' OR 
FMA0.SPACETYPE like 'A-WKS-%' THEN FMA0.CAPACITY 
ELSE 0 END) as Capacity
from fma0 
where fma0.bldgcode = 'tst01' 
group by fma0.bldgcode, fma0.floorcode 
)tmp
order by bldgcode, floorcode
WITH CTE_SUMS ([bldgcode], [floorcode], [Occupancy], [Capacity])
AS  (
    SELECT 
        fma0.bldgcode AS [bldgcode], 
        fma0.floorcode AS [floorcode], 
        sum(fma0.occ) AS [Occupancy], 
        sum(CASE WHEN FMA0.SPACETYPE like 'A-OFF-%' OR 
            FMA0.SPACETYPE like 'A-WKS-%' THEN FMA0.CAPACITY 
            ELSE 0 END) AS [Capacity]
    FROM fma0 
    WHERE fma0.bldgcode = 'tst01' 
    GROUP BY fma0.bldgcode, fma0.floorcode
    )
SELECT [bldgcode], [floorcode], [Occupancy], [Capacity], ([Occupancy] / [Capacity]) AS [Sum]
FROM CTE_SUMS