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中的多列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Pivot 多列 [关闭]

如何在Oracle sql中将行转换为按多列分组的列[关闭]

Spark SQL一列拆分多列

对 SQL 中多列中的行计数求和的查询

SQL Server 中多列非聚集索引中的列顺序是不是重要?

SQL - 计算多列中的出现次数