需要将整个 case 语句转换为 varchar

Need to convert entire case statement to varchar

正在为 NACHRI 提交编写 SQL 摘录。 SSMS v17.6

需要将以盎司为单位的重量转换为克(仅限整数),并使用附加子句将 NULL 值更改为“----”(四个破折号 - 无引号)。这四个破折号位导致整个事情需要成为 VARCHAR,但我不确定如何使用数字方程来做到这一点。

我收到了

Error converting data type varchar to numeric

在以下 case 语句中:

',CASE WHEN baby.OB_DEL_BIRTH_WT > 0 THEN CEILING(baby.OB_DEL_BIRTH_WT/0.035274)
        when baby.OB_DEL_BIRTH_WT is null then '----' end as weight_gm'

正确答案的示例如下所示:

3534, 
'----',
2784,
3556,
'----'
----
----

使用cast():

(CASE WHEN baby.OB_DEL_BIRTH_WT > 0
       THEN CAST(CEILING(baby.OB_DEL_BIRTH_WT/0.035274) as VARCHAR(255))
      WHEN baby.OB_DEL_BIRTH_WT IS NULL 
      THEN '----' 
 END) as weight_gm

或者,假设权重总是大于0(合理),那么就用COALESCE():

COALESCE(CAST(CEILING(baby.OB_DEL_BIRTH_WT/0.035274) as VARCHAR(255)), '----')

请注意,您仍然需要 CAST()

如果能分享一下baby的table结构就更好了。 您是否需要以逗号分隔的单个字段的值?然后使用以下查询:

 SELECT distinct
        abc = STUFF(
                     (SELECT ',' + (CASE WHEN baby.OB_DEL_BIRTH_WT > 0
           THEN CAST(CEILING(baby.OB_DEL_BIRTH_WT/0.035274) as VARCHAR(255))
          WHEN baby.OB_DEL_BIRTH_WT IS NULL 
          THEN '''----''' 
     END) FROM baby FOR XML PATH ('')), 1, 1, ''
                   ) 
    FROM baby 

这将 return 像这样的单行 3534, '----',2784,3556,'----'