在SQL中添加临时列,其中值取决于另一列

时间:2014-02-19 15:50:40

标签: mysql sql mysql-workbench

我有这张桌子:

ID | name | result | 
--------------------    
 1 |  A   |   1    |
--------------------
 2 |  B   |   2    |
--------------------
 3 |  C   |   1    |
--------------------
 1 |  A   |   2    |
--------------------
 4 |  E   |   2    |
--------------------

我想在| result |旁边添加一个新的临时列,其中result = 1的值应该是100,而result = 2的值应该是80,所以它应该是这样的:

ID | name | result | NewColumn|
-------------------------------    
 1 |  A   |   1    |  100     |
-------------------------------
 2 |  B   |   2    |   80     |
-------------------------------
 3 |  C   |   1    |  100     |
-------------------------------
 1 |  A   |   2    |  80      |
-------------------------------
 4 |  E   |   2    |  80      |
-------------------------------

如何在SQL中查询?

5 个答案:

答案 0 :(得分:9)

SELECT的列列表中使用CASE expression - 如下所示:

SELECT
    ID,
    name,
    result,
    CASE
        WHEN result = 1 THEN 100
        WHEN result = 2 THEN 80
        ELSE NULL
    END AS NewColumn
FROM YourTable

添加其他WHEN表达式或根据需要更改ELSE表达式。

答案 1 :(得分:1)

您可以在查询中添加case语句:

SELECT id, name, result, CASE result WHEN 1 THEN 100 WHEN 2 THEN 80 ELSE NULL END
from   my_table

答案 2 :(得分:1)

SELECT ID
,name
,result
,NewColumn = CASE WHEN result = 1 THEN 100 WHEN result = 2 THEN 80 END 
FROM Table1

答案 3 :(得分:1)

由于上面给出的答案也是正确的。但我会说,如果现有列和新列之间有预定义的关系或逻辑,那么您也可以在没有CASE的情况下实现这一点。为所有可能的值写CASE是不可能的也不是有效的。

对于您现有的数据。我可以使用类似这样的东西

SELECT ID, name, result, (20*(6-result)) as NewColumn
FROM YourTable

我假设1=>1002=>803=>604=>405=>20

当然这只是为了理解目的。您可以根据实际数据创建自己的表达式。

答案 4 :(得分:0)

您将在Mysql中使用IF语句

SELECT col1,col2,col3,IF(col3 = 1,'100',IF(col3 = 2,80,'')) 来自your_table