Sql 获取要跨所有行显示的大小写表达式

Sql 获取要跨所有行显示的大小写表达式,sql,sql-server,Sql,Sql Server,我正在设置一个查询,需要在所有列中包含所有case表达式,而不是创建新行 我尝试添加case表达式,如代码所示。我还尝试在case表达式之前添加SUM SELECT sum(Property.user_assignable) AS total_NASF, sum(Property.user_gross) AS total_GSF, Region.description As Region, (CASE WHEN UDF.Custom005 = 'Educational' Th

我正在设置一个查询,需要在所有列中包含所有case表达式,而不是创建新行

我尝试添加case表达式,如代码所示。我还尝试在case表达式之前添加SUM

SELECT
  sum(Property.user_assignable) AS total_NASF,
  sum(Property.user_gross) AS total_GSF,
 Region.description As Region,
(CASE 
  WHEN UDF.Custom005 = 'Educational'
  Then SUM(Property.user_assignable)
  End) As Educational_NASF,
(CASE 
  WHEN UDF.Custom005 = 'Educational'
  Then sum(Property.user_gross)
  End) As Educational_GSF,
(CASE 
  WHEN UDF.Custom005 = 'Residence Hall'
  Then sum(Property.user_assignable)
  End) As Residential_NASF,
(CASE 
  WHEN UDF.Custom005 = 'Residence Hall'
  Then sum(Property.user_gross)
  End) As Residential_GSF,
(CASE 
  WHEN UDF.Custom005 = 'Hospital'
  Then sum(Property.user_assignable)
  End) As Hospital_NASF,
(CASE 
  WHEN UDF.Custom005 = 'Hospital'
  Then sum(Property.user_gross)
  End) As Hospital_GSF

FROM
  ae_s_bld_c Property
  Inner JOIN dbo.ae_s_bld_c_udf UDF ON (Property.multitenant_id = 
UDF.multitenant_id)
  AND (Property.bldg = UDF.bldg)
  AND (Property.fac_id = UDF.fac_id)
  AND (Property.region_code = UDF.region_code)
  Inner Join ae_b_reg_e Region ON Property.multitenant_id = 
region.multitenant_id
  AND Property.region_code = Region.region_code

WHERE
  (Property.bldg_status = 'ACTIVE' OR
  Property.bldg_status = 'VACANT' OR
  Property.bldg_status = 'CONSTRUCTION') AND
  Property.owned_leased = 'Y' AND
  Property.prop_type = 'BUILDING' AND
  Property.bldg_class <> 'Parking Struct' AND
  Property.region_code LIKE '28%'

  Group By
Region.description,
UDF.Custom005

预期结果(35行)

尝试将列从
CASE…SUM()
更改为
SUM(CASE…
;例如改变:

(
  CASE 
    WHEN UDF.Custom005 = 'Educational'
    THEN SUM(Property.user_assignable)
  END
) AS Educational_NASF
致:


确保您也从
分组依据
表达式中删除了字段
UDF.Custom005

这应该适用于您尝试执行的操作。 将
大小写
放入
总和
中,
部分返回列,
部分返回0

...
SUM(
  CASE
    WHEN UDF.Custom005 = 'Educational' Then Property.user_assignable
    ELSE 0
  End
) As Educational_NASF,
...

在本例中,所有行都被求和,但如果
时的
条件不匹配(即,当它不是
'Educational'
时),列值将被调零,因此求和结果只包含您想要的行。

简化您的问题!这是哪个数据库?Oracle?Microsoft SQL Server感谢Gents!!成功了。
...
SUM(
  CASE
    WHEN UDF.Custom005 = 'Educational' Then Property.user_assignable
    ELSE 0
  End
) As Educational_NASF,
...