我有一张从第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
答案 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;)作为示例