2016-09-28 86 views
0

已经写了一个查询,提取数据和求和面积值和值忽略GROUP BY的 - SQL SERVER 2008

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 

监守我不得不使用SPACETYPE来确定采用何种场面积从我需要在GROUP BY子句中包含SPACETYPE。这意味着即使我没有直接在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** 

如何获取一行在特定BLDGCODE分裂所有SPACETYPES的所有区域的成本码

+0

该查询甚至执行吗? – jarlh

回答

2

尝试使用公用表表达式得到那么总的细节:

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 
+0

谢谢史蒂夫。但出现错误 – FredTheDog

+0

消息8120,级别16,状态1,行6 列'FMB0.REG_CODE'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – FredTheDog

+0

再次感谢史蒂夫 – FredTheDog