我有一个代码,我在使用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
是一个包含特定培训时数的专栏,我需要为每个员工在设定年份总结。
答案 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]