Sql CASE语句中的CONVERT子句
此查询:Sql CASE语句中的CONVERT子句,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,此查询: SELECT COUNT (a.clientid) AS NumChild ,sub.eligtype FROM (SELECT CASE WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition' WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
SELECT
COUNT (a.clientid) AS NumChild
,sub.eligtype
FROM
(SELECT
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM
ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN
ei_archive..closed_fy13_clientstatus13 a ON sub.eligtype = a.eligibilitytyperecalc
WHERE
fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY
sub.eligtype
返回错误:
Msg 245,16级,状态1,第1行
将varchar值“AtRisk”转换为数据类型smallint时,转换失败
我理解不同数据类型的问题,但无法确定将CONVERT子句放在何处。我在第一个select语句、CASE语句和GROUP BY语句中尝试了它。您试图将值“AtRisk”转换为一个不可能的数值。您可以在子查询中包含数字字段,并在该字段上进行连接:
SELECT COUNT (a.clientid) AS NumChild
, sub.eligtype
FROM
(SELECT
eligibilitytyperecalc , // include key value
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN ei_archive..closed_fy13_clientstatus13 a
ON sub.eligibilitytyperecalc = a.eligibilitytyperecalc // join on key field
WHERE fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY sub.eligtype
您正在尝试将值“AtRisk”转换为不可能的数值。您可以在子查询中包含数字字段,并在该字段上进行连接:
SELECT COUNT (a.clientid) AS NumChild
, sub.eligtype
FROM
(SELECT
eligibilitytyperecalc , // include key value
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN ei_archive..closed_fy13_clientstatus13 a
ON sub.eligibilitytyperecalc = a.eligibilitytyperecalc // join on key field
WHERE fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY sub.eligtype
您正在尝试将值“AtRisk”转换为不可能的数值。您可以在子查询中包含数字字段,并在该字段上进行连接:
SELECT COUNT (a.clientid) AS NumChild
, sub.eligtype
FROM
(SELECT
eligibilitytyperecalc , // include key value
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN ei_archive..closed_fy13_clientstatus13 a
ON sub.eligibilitytyperecalc = a.eligibilitytyperecalc // join on key field
WHERE fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY sub.eligtype
您正在尝试将值“AtRisk”转换为不可能的数值。您可以在子查询中包含数字字段,并在该字段上进行连接:
SELECT COUNT (a.clientid) AS NumChild
, sub.eligtype
FROM
(SELECT
eligibilitytyperecalc , // include key value
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN ei_archive..closed_fy13_clientstatus13 a
ON sub.eligibilitytyperecalc = a.eligibilitytyperecalc // join on key field
WHERE fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY sub.eligtype
我相信表ei_archive..closed_fy13_clientstatus13的字段eligibilitytyperecalc是一个整数,因此请将a.eligibilitytyperecalc转换为char/varchar,因为您要将其与sub.eligtype=a.EligibilitypeRecalc上的字符串进行比较。请尝试下面的代码
SELECT
COUNT (a.clientid) AS NumChild
,sub.eligtype
FROM
(SELECT
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM
ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN
ei_archive..closed_fy13_clientstatus13 a ON sub.eligtype = cast(a.eligibilitytyperecalc as char(10))
WHERE
fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY
sub.eligtype
我相信表ei_archive..closed_fy13_clientstatus13的字段eligibilitytyperecalc是一个整数,因此请将a.eligibilitytyperecalc转换为char/varchar,因为您要将其与sub.eligtype=a.EligibilitypeRecalc上的字符串进行比较。请尝试下面的代码
SELECT
COUNT (a.clientid) AS NumChild
,sub.eligtype
FROM
(SELECT
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM
ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN
ei_archive..closed_fy13_clientstatus13 a ON sub.eligtype = cast(a.eligibilitytyperecalc as char(10))
WHERE
fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY
sub.eligtype
我相信表ei_archive..closed_fy13_clientstatus13的字段eligibilitytyperecalc是一个整数,因此请将a.eligibilitytyperecalc转换为char/varchar,因为您要将其与sub.eligtype=a.EligibilitypeRecalc上的字符串进行比较。请尝试下面的代码
SELECT
COUNT (a.clientid) AS NumChild
,sub.eligtype
FROM
(SELECT
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM
ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN
ei_archive..closed_fy13_clientstatus13 a ON sub.eligtype = cast(a.eligibilitytyperecalc as char(10))
WHERE
fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY
sub.eligtype
我相信表ei_archive..closed_fy13_clientstatus13的字段eligibilitytyperecalc是一个整数,因此请将a.eligibilitytyperecalc转换为char/varchar,因为您要将其与sub.eligtype=a.EligibilitypeRecalc上的字符串进行比较。请尝试下面的代码
SELECT
COUNT (a.clientid) AS NumChild
,sub.eligtype
FROM
(SELECT
CASE
WHEN eligibilitytyperecalc IN ('1', '4', '5', '7') THEN 'EstCondition'
WHEN eligibilitytyperecalc IN ('2', '6') THEN 'EstDelay'
WHEN eligibilitytyperecalc IN ('3', '8') THEN 'AtRisk'
ELSE 'Missing'
END AS EligType
FROM
ei_archive..closed_fy13_clientstatus13) AS sub
INNER JOIN
ei_archive..closed_fy13_clientstatus13 a ON sub.eligtype = cast(a.eligibilitytyperecalc as char(10))
WHERE
fy13_finalclientstatus = 14
AND programid <>40
AND programid = 01
GROUP BY
sub.eligtype
它是一个整数;但是,当我运行代码时,它返回了列名,但没有计数;但是,当我运行代码时,它返回了列名,但没有计数;但是,当我运行代码时,它返回了列名,但没有计数;但是,当我运行代码时,它返回了列名,但没有计数。