sql中的多列[关闭]
Posted
技术标签:
【中文标题】sql中的多列[关闭]【英文标题】:Multiple columns in when case in sql [closed] 【发布时间】:2017-07-10 05:32:02 【问题描述】:SELECT ...
CASE
WHEN BONUS = 400 then SALARY = SALARY+400
END
From Emp;
当我使用=
作为工资列时,我遇到了语法错误。
【问题讨论】:
是要在选择查询的输出中显示 Salary+400 还是要更新表中的记录? 【参考方案1】:如果你想给薪水加上红利并显示结果,那么去掉case语句中的salary=
。
SELECT ...
CASE WHEN BONUS = 400 then SALARY+400 END as SALARY
From Emp;
【讨论】:
其实我的要求是使用'='来操作符。 @chaitu - 这里=
操作符有什么用?
这里我举了一个小例子。我的要求是当 column1 = 'xyz' 然后 column2 = 'abc' (这是我的要求)
@chaitu - 仍然不清楚。添加有问题的示例数据和预期结果。【参考方案2】:
试试这个。
SELECT
SALARY = CASE
WHEN BONUS = 400 then SALARY+400
END
From Emp;
或
SELECT
CASE
WHEN BONUS = '400'
then SALARY +400
END
From Emp;
如果您想更新新工资,请使用。
UPDATE Emp
SET SALARY = SALARY + CASE WHEN BONUS =400 THEN 400 ELSE 0 END;
【讨论】:
其实我的要求是使用'='来操作符。 @chaitu.. 是什么意思?用样本结果和预期结果的表结构解释 我的要求是当 column1 = 'xyz' 然后 column2 = 'abc' @chaitu 检查更新代码【参考方案3】:在 select 语句中,CASE 表达式的工作方式与函数非常相似。
在您的情况下,它将返回一个值而不是两列。
如果您需要:返回两列,column1 (BONUS) 和 column2 (SALARY),并且薪水取决于奖金,您可以考虑这样的事情。
SELECT
-- Column1
BONUS, -- Column BONUS from Emp table
-- Column2
CASE
WHEN BONUS = 400 THEN SALARY+400
ELSE SALARY
END AS SALARY -- 'SALARY' alias is assigned to the resultant value of the CASE (to make this a named Column)
FROM Emp
您将获得一个包含 BONUS 和 SALARY 两列的结果集,其中 SALARY 值取决于 BONUS 列的值。
【讨论】:
以上是关于sql中的多列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在Oracle sql中将行转换为按多列分组的列[关闭]