案例陈述中的总结

时间:2013-03-06 12:57:44

标签: sql-server case

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

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年为每个人总计的。{1}}。 ST_SUM_HOURS是一个包含特定培训时数的专栏,我需要为每个员工在设定年份总结。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

请勿在{{1​​}}中使用'。这样“ST_HOURS_SUM”是一个字符串而不是列名。删除THEN 'ST_HOURS_SUM' ELSE 0 END,它应该可以。

答案 2 :(得分:1)

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

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