简体   繁体   English

忽略GROUP BY的值的总和-SQL SERVER 2008

[英]SUM of values ignoring GROUP BY - SQL SERVER 2008

Have written a query to pull data and SUM the area values 编写查询以提取数据并求和面积值

SELECT
rtrim(fmb0.reg_code) as Region,
RTRIM(FMB0.COUNTRY) AS COUNTRY,
RTRIM(FMB0.BLDGCODE) AS BLDGCODE,
(CASE WHEN FMB0.BLDGSTATUS = '' THEN 'RECORD'
ELSE FMB0.BLDGSTATUS END) AS SOURCE,
(CASE
WHEN FMA0.SPACETYPE = 'U-TLS-AS' THEN round(SUM(fma0.AREA),3)
ELSE round(SUM(fma0.USABLE),3) END) as [CHARGEABLE AREA],
(CASE 
WHEN len(rtrim(fma0.group_))<1 THEN '**Unassigned**'  
ELSE RTRIM(FMA0.GROUP_) END) AS [COST CODE], 
(CASE 
WHEN len(rtrim(fma0.group_))<1 THEN '**Unassigned Space**' 
WHEN len(rtrim(fma0.group_))>1 AND rtrim(FMG0.GROUPDESC) IS NULL          THEN '**Inactive Cost Code**' 
ELSE RTRIM(FMG0.GROUPDESC) END) AS [COST CENTRE]

FROM FMA0 

LEFT JOIN FMB0 ON FMA0.BLDGCODE = FMB0.BLDGCODE
LEFT JOIN FMG0 ON FMA0.GROUP_ = FMG0.GROUP_

GROUP BY FMB0.BLDGCODE, FMA0.FLOORCODE,  FMA0.GROUP_, FMG0.GROUPDESC, FMG0.GROUPDESC3, FMB0.BLDGSTATUS, FMB0.COUNTRY, FMB0.REG_CODE,FMA0.SPACETYPE

Becuase I have to use SPACETYPE to determine which field to take the AREA from I need to include SPACETYPE in the GROUP BY clause. 因为我必须使用SPACETYPE来确定要从中获取AREA的字段,所以我需要在GROUP BY子句中包含SPACETYPE。 This means I see results split out by SPACETYPE even though I am not directly requesting it in the SELECT statement. 这意味着即使我没有在SELECT语句中直接请求它,我仍然看到按SPACETYPE划分的结果。

Region  COUNTRY   BLDGCODE  SOURCE  FLOORCODE   CHARGEABLE AREA COST CODE       COST CENTRE
ASP     Hong Kong   BLDG01  CAD         28      39.016          **Unassigned**  **Unassigned Space**
ASP     Hong Kong   BLDG01  CAD         28      1217.146        **Unassigned**  **Unassigned Space**
ASP     Hong Kong   BLDG01  CAD         28      1506.181        **Unassigned**  **Unassigned Space**
ASP     Hong Kong   BLDG01  CAD         28      458.765         **Unassigned**  **Unassigned Space**
ASP     Hong Kong   BLDG01  CAD         28      1000.711        **Unassigned**  **Unassigned Space** 

How do I get one line for all the area of all SPACETYPES in a particular BLDGCODE split by COST CODE 如何在特定的BLDGCODE中为所有SPACETYPES的所有区域获取一行,并按COST CODE划分

try using a Common Table Expression to get the details then aggregate: 尝试使用通用表表达式来获取详细信息,然后进行汇总:

WITH CTE
AS
(
   SELECT rtrim(fmb0.reg_code) as Region,
          RTRIM(FMB0.COUNTRY) AS COUNTRY,
          RTRIM(FMB0.BLDGCODE) AS BLDGCODE,
          (CASE WHEN FMB0.BLDGSTATUS = '' THEN 'RECORD'
                ELSE FMB0.BLDGSTATUS END) AS SOURCE,
          (CASE WHEN FMA0.SPACETYPE = 'U-TLS-AS' THEN round(fma0.AREA,3)
                ELSE round(fma0.USABLE,3) END) as [CHARGEABLE AREA],
          (CASE WHEN len(rtrim(fma0.group_))<1 THEN '**Unassigned**'  
                ELSE RTRIM(FMA0.GROUP_) END) AS [COST CODE], 
          (CASE WHEN len(rtrim(fma0.group_))<1 THEN '**Unassigned Space**' 
                WHEN len(rtrim(fma0.group_))>1 
                   AND rtrim(FMG0.GROUPDESC) IS NULL THEN '**Inactive Cost Code**' 
                ELSE RTRIM(FMG0.GROUPDESC) END) AS [COST CENTRE]
  FROM FMA0 
  LEFT JOIN FMB0 ON FMA0.BLDGCODE = FMB0.BLDGCODE
  LEFT JOIN FMG0 ON FMA0.GROUP_ = FMG0.GROUP_
)
SELECT Region, Country, BLDGCODE, Source, 
       (SUM([CHARGEABLE AREA]) AS [Chargeable Area], [COST CODE],[COST CENTRE]
FROM CTE
GROUP BY BLDGCODE, [Cost Code], [Cost Centre], Source, COUNTRY, Region

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM