0

我有一个代码,我使用 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是一个包含特定培训小时数的列,我需要为每个员工在设定的年份汇总它们。

4

3 回答 3

1

试试这个 :

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
于 2013-03-06T13:00:24.327 回答
1

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

于 2013-03-06T13:01:16.303 回答
1

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

...ELSE 0 END) AS [2010_Hours]
于 2013-03-06T13:15:08.467 回答