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 

它是一个整数;但是,当我运行代码时,它返回了列名,但没有计数;但是,当我运行代码时,它返回了列名,但没有计数;但是,当我运行代码时,它返回了列名,但没有计数;但是,当我运行代码时,它返回了列名,但没有计数。