我需要帮助,我不完全确定如何解决。
这是我的代码:
SELECT DISTINCT
Nr_of_Times_Cust_No_Appears=CASE WHEN CAST(a.TV_Code AS Int)-CAST(BB_Code AS Int)=0 THEN COUNT(*) OVER (PARTITION BY BB_Code) ELSE 'Not same' END
FROM table
基本上,上面的代码是为了确保TV Code和BB Code的减法为零(0),如果不是'Not Same'。 TV Code和BB Code都是CAST到Int的varchar。问题在于ELSE'不相同'。
这是我从SQL SERVER Management Studio获得的输出:
Conversion failed when converting the varchar value 'Not same' to data type int.
我该怎么做才能让它发挥作用?
更新:我终于找到了解决方法。
CAST(COUNT(*) OVER (PARTITION BY XX) AS Varchar).....
它有效!!!!
答案 0 :(得分:2)
这种情况正在发生,因为CASE语句的输出从ELSE返回计数()(整数)与'不相同'(字符串)。它们需要是相同的类型。如果你将你的计数()转换成一个字符串就可以了。
SELECT DISTINCT Nr_of_Times_Cust_No_Appears=
CASE WHEN CAST(a.TV_Code AS Int)-CAST(BB_Code AS Int)=0
THEN CAST(COUNT(*) OVER (PARTITION BY BB_Code) AS VARCHAR)
ELSE 'Not same'
END
FROM table
<强>替代:强>
SELECT DISTINCT Nr_of_Times_Cust_No_Appears=
CASE WHEN CAST(a.TV_Code AS Int)-CAST(BB_Code AS Int)=0
THEN COUNT(*) OVER (PARTITION BY BB_Code)
ELSE -1
END
FROM table
在消费代码中,即用户界面,如果Nr_of_Times_Cust_No_Appears&lt; 0然后显示'不一样'!
答案 1 :(得分:1)
检查变量Nr_of_Times_Cust_No_Appears。它似乎是int,但你尝试设置它'不相同'。
答案 2 :(得分:1)
由于目标列只能有一种数据类型,因此只会发生错误。
CASE
语句的第一部分有效地将列类型设置为期望一个整数,因此当您点击ELSE
部分并尝试插入Not Same
时,您可以使用SELECT Num
INTO #T
FROM ( SELECT '1' AS Num
UNION
SELECT '2'
) AS val
SELECT CASE WHEN Num = '1' THEN CAST(Num AS INT)
ELSE 'Not 1'
END AS OutputVal
FROM #T
DROP TABLE #T
。得到错误。
样品:
NULL
给你:
转换varchar值时转换失败&#39;不是1&#39;数据类型int。
所以你需要插入一个可接受的值,可以是SELECT Num
INTO #T
FROM ( SELECT '1' AS Num
UNION
SELECT '2'
) AS val
SELECT CASE WHEN Num = '1' THEN CAST(Num AS INT)
ELSE NULL
END AS OutputVal
FROM #T
DROP TABLE #T
:
样品:
{{1}}