Sql server 2008 如何将NULL或0值替换为短划线(-)

Sql server 2008 如何将NULL或0值替换为短划线(-),sql-server-2008,Sql Server 2008,我有一张从第一季度到第四季度的成绩表。当特定科目的分数等于0.00或NULL时,我希望以“-”破折号显示它 这是我的子查询 ,(CASE WHEN dtl.STUDENT_GRADE < 1 then '-' else (SELECT dtl.STUDENT_GRADE WHERE (SELECT LAM_TYPE FROM PS_CRSE_COMP_LAM WHERE CRSE_ID = (SELECT CRSE_ID FROM PS_CLASS_TBL WHERE STRM = en

我有一张从第一季度到第四季度的成绩表。当特定科目的分数等于0.00或NULL时,我希望以“-”破折号显示它

这是我的子查询

,(CASE WHEN dtl.STUDENT_GRADE < 1 then '-' else
(SELECT dtl.STUDENT_GRADE WHERE (SELECT LAM_TYPE
 FROM PS_CRSE_COMP_LAM WHERE CRSE_ID = (SELECT CRSE_ID FROM PS_CLASS_TBL WHERE STRM = enrl.STRM AND CLASS_NBR = enrl.CLASS_NBR) AND
CRSE_OFFER_NBR = (SELECT CRSE_OFFER_NBR FROM PS_CLASS_TBL WHERE STRM = enrl.STRM AND CLASS_NBR = enrl.CLASS_NBR) AND 
SEQUENCE_NO = dtl.SEQUENCE_NO )= '1ST_PERIOD')end) AS FIRST_PERIOD
它返回一个算术溢出错误,将varchar转换为数据类型numeric

我尝试了使用CAST和replace转换的解决方案,但对我来说不起作用

提前谢谢


我使用了MSSQL Server 2008,我也遇到了类似的问题

选择isnullexample,0作为示例

我现在没有sql server来尝试它,但是用它来尝试,它应该用0替换NULL,或者在我们的例子中用dash来尝试


选择isnullexample“-”作为示例,这是因为您的子查询正在返回一个数字。在这种情况下,应将其转换为字符串,以便在值列表中允许:

(CASE WHEN (dtl.STUDENT_GRADE < 1 OR dtl.STUDENT_GRADE IS NULL)
    THEN '-' 
    ELSE
        CAST((SELECT dtl.STUDENT_GRADE WHERE (SELECT LAM_TYPE
        FROM PS_CRSE_COMP_LAM WHERE CRSE_ID = (SELECT CRSE_ID FROM PS_CLASS_TBL WHERE STRM = enrl.STRM AND CLASS_NBR = enrl.CLASS_NBR) AND
        CRSE_OFFER_NBR = (SELECT CRSE_OFFER_NBR FROM PS_CLASS_TBL WHERE STRM = enrl.STRM AND CLASS_NBR = enrl.CLASS_NBR) 
        AND SEQUENCE_NO = dtl.SEQUENCE_NO )= '1ST_PERIOD') AS NVARCHAR(20))
    end 
) AS FIRST_PERIOD

我也试过了,但对我没用:但现在没问题了。谢谢你的帮助。