获取一个CASE表达式以在所有行中显示

时间:2019-06-25 12:49:59

标签: 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'
  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

实际结果(64行)

total_NASF  total_GSF   Region  Educational_NASF    Educational_GSF Residential_NASF    Residential_GSF Hospital_NASF   Hospital_GSF
1947816.0000    3554587.0000    ALBANY  1947816.0000    3554587.0000    NULL    NULL    NULL    NULL
302182.0000 459216.0000 ALFRED CERAMICS 302182.0000 459216.0000 NULL    NULL    NULL    NULL
543291.0000 840690.0000 ALFRED STATE    543291.0000 840690.0000 NULL    NULL    NULL    NULL
2158553.0000    4435429.0000    BINGHAMTON  2158553.0000    4435429.0000    NULL    NULL    NULL    NULL
1239205.0000    2146775.0000    BROCKPORT   1239205.0000    2146775.0000    NULL    NULL    NULL    NULL
1361724.0000    2348205.0000    BUFFALO STATE   1361724.0000    2348205.0000    NULL    NULL    NULL    NULL
401412.0000 738096.0000 CANTON  401412.0000 738096.0000 NULL    NULL    NULL    NULL
576831.0000 868511.0000 COBLESKILL  576831.0000 868511.0000 NULL    NULL    NULL    NULL
2381628.0000    3570069.0000    CORNELL UNIVERSITY CALS 2381628.0000    3570069.0000    NULL    NULL    NULL    NULL
179056.0000 351563.0000 CORNELL UNIVERSITY CHE  179056.0000 351563.0000 NULL    NULL    NULL    NULL
600532.0000 930246.0000 CORNELL UNIVERSITY CVM  600532.0000 930246.0000 NULL    NULL    NULL    NULL
132414.0000 279996.0000 CORNELL UNIVERSITY ILR  132414.0000 279996.0000 NULL    NULL    NULL    NULL
1109032.2200    1832074.0000    CORTLAND    1109032.2200    1832074.0000    NULL    NULL    NULL    NULL
469327.0000 718870.0000 DELHI   469327.0000 718870.0000 NULL    NULL    NULL    NULL
448596.0000 988725.0000 DOWNSTATE   448596.0000 988725.0000 NULL    NULL    NULL    NULL
127394.0000 216171.0000 EMPIRE ST   127394.0000 216171.0000 NULL    NULL    NULL    NULL
703989.0000 1121646.0000    ESF 703989.0000 1121646.0000    NULL    NULL    NULL    NULL
837761.0000 1329023.0000    FARMINGDALE 837761.0000 1329023.0000    NULL    NULL    NULL    NULL
845190.0000 1453874.0000    FREDONIA    845190.0000 1453874.0000    NULL    NULL    NULL    NULL
881220.0000 1408099.0000    GENESEO 881220.0000 1408099.0000    NULL    NULL    NULL    NULL
285207.0000 506571.0000 MARITIME    285207.0000 506571.0000 NULL    NULL    NULL    NULL
746257.0000 1105310.0000    MORRISVILLE 746257.0000 1105310.0000    NULL    NULL    NULL    NULL
831431.8000 1417120.0000    NEW PALTZ   831431.8000 1417120.0000    NULL    NULL    NULL    NULL
498878.0000 858907.0000 OLD WESTBURY    498878.0000 858907.0000 NULL    NULL    NULL    NULL
834187.0000 1488532.0000    ONEONTA 834187.0000 1488532.0000    NULL    NULL    NULL    NULL
146526.0000 298000.0000 OPTOMETRY   146526.0000 298000.0000 NULL    NULL    NULL    NULL
1294511.0000    2259182.0000    OSWEGO  1294511.0000    2259182.0000    NULL    NULL    NULL    NULL
869118.0000 1461090.0000    PLATTSBURGH 869118.0000 1461090.0000    NULL    NULL    NULL    NULL
962934.0000 1578205.0000    POTSDAM 962934.0000 1578205.0000    NULL    NULL    NULL    NULL
966239.0000 1770548.0000    PURCHASE    966239.0000 1770548.0000    NULL    NULL    NULL    NULL
3880073.0000    6720116.0000    STONY BROOK 3880073.0000    6720116.0000    NULL    NULL    NULL    NULL
369738.0000 667639.0000 SUNY POLY   369738.0000 667639.0000 NULL    NULL    NULL    NULL
209287.0000 423503.0000 SYSTEM ADMINISTRATION   209287.0000 423503.0000 NULL    NULL    NULL    NULL
4705594.6300    8732515.0000    UNIVERSITY AT BUFFALO   4705594.6300    8732515.0000    NULL    NULL    NULL    NULL
766558.0000 1477909.0000    UPSTATE 766558.0000 1477909.0000    NULL    NULL    NULL    NULL
475921.0000 842600.0000 DOWNSTATE   NULL    NULL    NULL    NULL    475921.0000 842600.0000
696131.0000 1603981.0000    STONY BROOK NULL    NULL    NULL    NULL    696131.0000 1603981.0000
883768.0000 1674539.0000    UPSTATE NULL    NULL    NULL    NULL    883768.0000 1674539.0000
1194854.0000    1881894.0000    ALBANY  NULL    NULL    1194854.0000    1881894.0000    NULL    NULL
439096.0000 660753.0000 ALFRED STATE    NULL    NULL    439096.0000 660753.0000 NULL    NULL
1379069.0000    2391225.0000    BINGHAMTON  NULL    NULL    1379069.0000    2391225.0000    NULL    NULL
474758.0000 851474.0000 BROCKPORT   NULL    NULL    474758.0000 851474.0000 NULL    NULL
409097.0000 620917.0000 BUFFALO STATE   NULL    NULL    409097.0000 620917.0000 NULL    NULL
134730.0000 238872.0000 CANTON  NULL    NULL    134730.0000 238872.0000 NULL    NULL
275993.0000 410349.0000 COBLESKILL  NULL    NULL    275993.0000 410349.0000 NULL    NULL
514359.0000 815718.0000 CORTLAND    NULL    NULL    514359.0000 815718.0000 NULL    NULL
204754.0000 327096.0000 DELHI   NULL    NULL    204754.0000 327096.0000 NULL    NULL
86363.0000  140586.0000 DOWNSTATE   NULL    NULL    86363.0000  140586.0000 NULL    NULL
130018.0000 194581.0000 FARMINGDALE NULL    NULL    130018.0000 194581.0000 NULL    NULL
551961.0000 857798.0000 FREDONIA    NULL    NULL    551961.0000 857798.0000 NULL    NULL
589839.0000 916684.0000 GENESEO NULL    NULL    589839.0000 916684.0000 NULL    NULL
178277.0000 281198.0000 MARITIME    NULL    NULL    178277.0000 281198.0000 NULL    NULL
274148.0000 475738.0000 MORRISVILLE NULL    NULL    274148.0000 475738.0000 NULL    NULL
518649.0000 823189.0000 NEW PALTZ   NULL    NULL    518649.0000 823189.0000 NULL    NULL
287051.0000 487491.0000 OLD WESTBURY    NULL    NULL    287051.0000 487491.0000 NULL    NULL
565636.0000 915287.0000 ONEONTA NULL    NULL    565636.0000 915287.0000 NULL    NULL
739526.0000 1208360.0000    OSWEGO  NULL    NULL    739526.0000 1208360.0000    NULL    NULL
435037.9000 709043.0000 PLATTSBURGH NULL    NULL    435037.9000 709043.0000 NULL    NULL
480844.0000 767648.0000 POTSDAM NULL    NULL    480844.0000 767648.0000 NULL    NULL
396685.0000 542917.0000 PURCHASE    NULL    NULL    396685.0000 542917.0000 NULL    NULL
2074300.0000    3045190.0000    STONY BROOK NULL    NULL    2074300.0000    3045190.0000    NULL    NULL
162407.0000 244024.0000 SUNY POLY   NULL    NULL    162407.0000 244024.0000 NULL    NULL
926428.6700 1496986.0000    UNIVERSITY AT BUFFALO   NULL    NULL    926428.6700 1496986.0000    NULL    NULL
47457.0000  75911.0000  UPSTATE NULL    NULL    47457.0000  75911.0000  NULL    NULL

预期结果(35行)

2 个答案:

答案 0 :(得分:1)

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

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

收件人:

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

确保还要从UDF.Custom005表达式中删除字段GROUP BY

答案 1 :(得分:0)

这应该可以满足您的尝试。 将CASE放在SUM内,其中true部分返回该列,而false部分返回0。

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

在此示例中,所有行都被求和,但是在WHEN条件不匹配的情况下(即,当它与'Educational'不匹配时,列值被清零),因此求和最终只包含所需的行。