我在如下的sql查询中使用情况,
SELECT
CASE
WHEN Grade = 'Diesel' THEN 4
WHEN Grade = 'Petrol' THEN 5
END as Grade
,sales
FROM testTableA as tta
INNER JOIN testTableB ttb on ttb.productid = tta.Grade
当我在上面奔跑时,出现"Conversion failed when converting the varchar value 'Diesel' to data type int.
“错误。
我也尝试过Cast(tta.Grade,int),但是没有运气。我在这里做错什么了?
修改
testTableA : column grade is varchar.
testTableB: column productid is int
答案 0 :(得分:1)
您必须返回字符串值,因为$string = get_include_contents('../google_map.php');
// Now, you can just 'echo' it and see the results
echo $string;
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
具有字符串值,而您的Grade
部分也返回了字符串,并且ELSE
表达式将仅返回一种类型:
case
编辑:加入也会引起对话问题,因此您必须进行一些对话
SELECT (CASE WHEN Grade = 'Diesel' THEN '4'
WHEN Grade = 'Petrol' THEN '5'
ELSE Grade
END) as Grade,
. . .
答案 1 :(得分:1)
鉴于您的代码示例,有两种可能性:
Grade
是一个数字,并且错误是由于case
将该值与'Diesel'
进行了比较。ProductId
是一个数字,并且当on
的值为Grade
时,错误来自'Diesel'
条件。当然,还有其他可能性,例如表引用确实是视图。
没有足够的信息来确定其中哪些实际发生。但是,您知道列的数据类型是什么,因此您可以立即确定问题所在。
如果我不得不猜测,那就是join
条件。将名为productId
的东西与名为grade
的东西连接起来是可疑的。
答案 2 :(得分:1)
从评论来看,我认为您可能正在寻找它:
SELECT
CASE
WHEN Grade = 'Diesel' THEN 4
WHEN Grade = 'Petrol' THEN 5
END as Grade
,sales
FROM testTableA as tta
INNER JOIN testTableB ttb on ttb.productid = CASE
WHEN tta.Grade = 'Diesel' THEN 4
WHEN tta.Grade = 'Petrol' THEN 5
END
答案 3 :(得分:0)
您似乎想加入到case语句的输出中,那么您应该是这样的:
Sidebar
或将SELECT
CASE
WHEN Grade = 'Diesel' THEN 4
WHEN Grade = 'Petrol' THEN 5
END as Grade
,sales
FROM testTableA as tta
INNER JOIN testTableB ttb
ON ttb.productid = CASE
WHEN tta.Grade = 'Diesel' THEN 4
WHEN tta.Grade = 'Petrol' THEN 5
END
包装到子查询中,以避免重复相同的逻辑