【问题标题】:Summing in a Case Statement总结案例陈述
【发布时间】:2013-03-06 12:57:43
【问题描述】:

我有一个代码,我使用 case when 语句来选择特定日历年的所有数据,我需要总结当年为学习而积累的所有时间,我的代码设置如下:

SELECT  rg.JOB_GRP_CD,
        SUM(CASE WHEN EMP_TNG_STT_DT BETWEEN '2010-01-01' AND '2010-12-31' THEN 'ST_HOURS_SUM' ELSE 0 END) AS 2010_Hours
FROM dbo.COL_TBL_TRN_RESULTS_GEMS rg
INNER JOIN dbo.COL_V_Cost_GEMS_Detail gd
    ON rg.JOB_GRP_CD = gd.JOB_GRP_CD 
    AND rg.EMP_TNG_STT_DT = gd.REC_EFF_STT_DT
GROUP BY rg.JOB_GRP_CD

我不断收到无法解析查询文本错误。 ST_HOURS_SUM 是我需要为 2010 年每个人汇总的内容。 ST_SUM_HOURS 是一个包含特定培训小时数的列,我需要为每个员工在设定的年份汇总它们。

【问题讨论】:

    标签: sql-server case


    【解决方案1】:

    如前所述,去掉引号,& 你不能有一个以数字开头的列别名;逃避它:

    ...ELSE 0 END) AS [2010_Hours]
    

    【讨论】:

      【解决方案2】:

      不要在THEN 'ST_HOURS_SUM' ELSE 0 END 中使用'。这样“ST_HOURS_SUM”是一个字符串而不是列名。删除',它应该可以工作。

      【讨论】:

      • 没用,我一直都是这样写代码的,所以很混乱
      【解决方案3】:

      试试这个:

      SELECT dbo.COL_TBL_TRN_RESULTS_GEMS.JOB_GRP_CD, SUM(CASE WHEN EMP_TNG_STT_DT BETWEEN '2010-01-01' AND '2010-12-31' THEN ST_HOURS_SUM ELSE 0 END) AS [2010_Hours]
      FROM  dbo.COL_TBL_TRN_RESULTS_GEMS INNER JOIN
                     dbo.COL_V_Cost_GEMS_Detail ON dbo.COL_TBL_TRN_RESULTS_GEMS.JOB_GRP_CD = dbo.COL_V_Cost_GEMS_Detail.JOB_GRP_CD AND 
                     dbo.COL_TBL_TRN_RESULTS_GEMS.EMP_TNG_STT_DT = dbo.COL_V_Cost_GEMS_Detail.REC_EFF_STT_DT
      GROUP BY dbo.COL_TBL_TRN_RESULTS_GEMS.JOB_GRP_CD
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2010-10-30
        • 2016-05-13
        • 2016-02-21
        • 1970-01-01
        • 2021-06-06
        相关资源
        最近更新 更多