Case语句语法(MySQL):-
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASECase语句语法( Server 2008):-
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END 我已经解释了不同之处,以便用户能够理解我在这里要说的是什么。
我在MySql中有以下代码:
SELECT sum(case when Year=2014 or purchased=0 then 0 else TC.TOTAL_SP_COST-TC.TOTAL_CP_COST end) as EARNINGs
from TABLE TC如果您正确地看到case语句,有2个字段(年份和购买)
当我尝试在MS SQL SERVER 2008中使用相同的代码时,当我试图在SQL SERVER中添加2字段时,我得到了"or“下面的红线。
SELECT sum(case (Year or purchased) when 2014 then 0 when 0 then 0 else TC.TOTAL_SP_COST-TC.TOTAL_CP_COST end) as EARNINGs因此,简单的问题是“我们可以在SQL SERVER中的case语句中添加多个字段吗?”如果是的话,我们怎么做呢?
发布于 2014-01-17 22:29:27
问题中的代码看起来很好--无论您在or下面是否有一条红线。您是否尝试过执行它,或者您是否认为由于那里有一条红线,所以不可能工作?IntelliSense不是任何东西--通常是落后的,或者它抱怨代码中其他地方与当前语句无关的事情。例如,您认为这里的第二个语句真的有问题吗?

如果我强调这一声明,SELECT仍然会被加下划线,好像它是不正确的。这并不意味着当我执行它的时候它就会失败。
这里有一个例子,说明您的代码运行良好,尽管您看到的是红色的,这可能是一个完全不相关的原因。
CREATE TABLE dbo.[TABLE]
(
[Year] INT,
purchased BIT,
TOTAL_SP_COST INT,
TOTAL_CP_COST INT
);
SELECT SUM(CASE WHEN [Year] = 2014 OR purchased = 0 THEN 0
ELSE TOTAL_SP_COST - TC.TOTAL_CP_COST END) AS EARNINGs
FROM dbo.[TABLE] AS TC;当然,我还做了一些其他的调整,例如,当您必须使用保留词(甚至将来的关键字)作为列名(您确实应该修复它)时,您应该正确地转义它们,您应该使用始终使用架构前缀和养成使用分号作为语句终止符的习惯。
没有意义的sample示例,因为我不知道您的示例数据或期望的结果。
最后,一个重要的语义问题是:CASE是一个表达式,而不是一个语句。语法图中缺少的重要一点是,搜索到的CASE表达式的输入和输出本身必须是一个表达式,Server中没有布尔表达式。所以你不能说:
CASE (col1 OR col2) WHEN something THEN ...发布于 2014-01-17 19:19:35
您是否尝试过有什么发现吗?、您已经发布的MySQL语法和MSSQL CASE完全相同。
编辑 for 修订2
这里的查询的主要问题是,您混淆了CASE语法的两个有效表单。有两个,您在MySQL中使用第一个,在MSSQL查询中将两者混合使用:
CASE
WHEN <expression>
AND <expression>
THEN <result>
END或
CASE <input>
WHEN <expression>
AND <expression>
THEN <result>
END编辑 3:永远不要相信MySQL
由于MySQL允许大量的完全地 怪诞 事物,所以我去查看错误移植的查询是否会在MySQL上运行。令人惊讶(但并不令人震惊),确实是这样的。但是,值得注意的是,原始的MySQL查询:
SELECT SUM( CASE
WHEN ( Year = 2014 OR purchased = 0 )
THEN 0
ELSE TC.TOTAL_SP_COST - TC.TOTAL_CP_COST
END ) AS EARNINGs
FROM `TABLE` TC;它的含义与MySQL兼容的第二个查询有很大不同,这里省略了SUM,还有第二列来说明如何计算表达式:
SELECT CASE ( Year OR purchased )
WHEN 2014
THEN 0 -- This line is unreachable; [BOOLEAN]: { , 0, 1 }
WHEN 0
THEN 0 -- This line only possible when Year == 0; Bad Year data;
ELSE TC.TOTAL_SP_COST - TC.TOTAL_CP_COST
END AS EARNINGs,
( Year OR purchased ) AS Res
FROM `TABLE` TC;https://stackoverflow.com/questions/21193919
复制相似问题