【发布时间】:2020-06-25 05:17:32
【问题描述】:
我有一个查询如下:
SELECT activity_code,
activity_name,
Count(*)
Total_Response,
yearnumber,
Cast(Avg(Cast(Isnull([response], 0) AS NUMERIC)) AS DECIMAL(10, 2))
[Ratings]
FROM (SELECT code [Activity_Code],
activityname [Activity_Name],
enddt.yearnumber,
CASE
WHEN Isnumeric(asmt.userresponse) = 1 THEN asmt.userresponse
ELSE 0
END [Response]
FROM (SELECT userid,
questionid,
activityid,
attemptenddateid,
CASE
WHEN Isnumeric(userresponse) = 1 THEN userresponse
ELSE '0'
END AS UserResponse
FROM factassessment) asmt
INNER JOIN dimuser usr
ON usr.id = asmt.userid
INNER JOIN (SELECT
id,
Cast(questionidentifier AS VARCHAR(1000)) AS
QuestionIdentifier
FROM dimquestion) ques
ON ques.id = asmt.questionid
INNER JOIN dimactivity act
ON act.id = asmt.activityid
INNER JOIN dimdate enddt
ON enddt.dateid = asmt.attemptenddateid
WHERE ( act.code LIKE 'U-%'
OR act.code LIKE 'CC-%' )
AND usr.empcntry <> 'administrator'
AND enddt.yearnumber IN ( 2015, 2016, 2017, 2018,
2019, 2020, 2021, 2021, 2022 )
AND ques.questionidentifier = 'course_content'
AND asmt.userresponse NOT IN ( '0', '-1' )) tab
GROUP BY activity_code,
activity_name,
yearnumber
ORDER BY activity_code
在执行上述代码时,我收到以下错误:
[SQLServer]转换 varchar 值 '.' 时转换失败到 数据类型 int。
我尝试如下修复它,但仍然遇到相同的错误:
SELECT activity_code,
activity_name,
Count(*)
Total_Response,
yearnumber,
Cast(Avg(Cast(Isnull([response], 0) AS NUMERIC)) AS DECIMAL(10, 2))
[Ratings]
FROM (SELECT code [Activity_Code],
activityname [Activity_Name],
enddt.yearnumber,
CASE
WHEN Isnumeric(asmt.userresponse + 'e0') = 1 THEN
asmt.userresponse
ELSE 0
END [Response]
FROM (SELECT userid,
questionid,
activityid,
attemptenddateid,
CASE
WHEN Isnumeric(userresponse + 'e0') = 1 THEN
userresponse
ELSE '0'
END AS UserResponse
FROM factassessment) asmt
INNER JOIN dimuser usr
ON usr.id = asmt.userid
INNER JOIN (SELECT
id,
Cast(questionidentifier AS VARCHAR(1000)) AS
QuestionIdentifier
FROM dimquestion) ques
ON ques.id = asmt.questionid
INNER JOIN dimactivity act
ON act.id = asmt.activityid
INNER JOIN dimdate enddt
ON enddt.dateid = asmt.attemptenddateid
WHERE ( act.code LIKE 'U-%'
OR act.code LIKE 'CC-%' )
AND usr.empcntry <> 'administrator'
AND enddt.yearnumber IN ( 2015, 2016, 2017, 2018,
2019, 2020, 2021, 2021, 2022 )
AND ques.questionidentifier = 'course_content'
AND asmt.userresponse NOT IN ( '0', '-1' )) tab
GROUP BY activity_code,
activity_name,
yearnumber
ORDER BY activity_code
我仍然遇到同样的错误。帮助解决此转换错误。
【问题讨论】:
标签: sql sql-server database type-conversion