select case when c3 is null then CAST(c2 AS VARCHAR(10)) else c1 end from Table
您正在混合数字和字符串数据类型。您将被要求用作字符串 VARCHAR、CHAR 等。
通过转换您的数字数据CAST(c2 AS VARCHAR(10)),您可以解决问题。
我猜为了好玩并且在 sql-server 中更准确,您可以将其保留为 integer,但它需要 cast as sql_variant 这将使得整个字段 sql_variant 并需要转换以供其后使用并且您将获得 0 好处,因为您始终可以测试 IIF(ISNUMERIC(CASE)=1,CAST(value as INT),NULL).... 这个答案可能太多了。
DECLARE @Table AS TABLE (C1 CHAR(2), c2 INT, c3 VARCHAR(4))
INSERT INTO @Table (C1, c2, c3)
VALUES ('a1', 1, 'hi'), ('b1',2,'hee'),('c1',3,null)
SELECT *
,CASE WHEN c3 is null THEN CAST(c2 AS sql_variant) else c1 end
FROM
@Table