如何将NULL或0值替换为破折号( - )

时间:2018-02-06 08:08:36

标签: sql-server-2008

我有一张从第1季到第4季的成绩表。当特定科目的成绩等于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

它返回Arithmetic overflow error converting varchar to data type numeric.

错误

我尝试了使用CAST进行转换的解决方案并进行替换,但它对我不起作用。

提前致谢。

我使用的是MSSQL Server 2008

2 个答案:

答案 0 :(得分:1)

这是因为您的子查询返回了一个数字。在这种情况下,您应该将其转换为字符串,以便在值列表中允许-

(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

答案 1 :(得分:0)

我遇到了类似的问题。

选择isnull(例如,0)作为示例

我现在没有sql server来尝试它,但尝试使用它应该用0替换NULL,或者在我们的例子中尝试使用短划线。

选择isnull(例如&#39; - &#39;)作为示例