在 SQL 中添加一个临时列,该列的值依赖于另一列。

6

我有这个表格:

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个回答

16

在你的SELECT列列表中使用一个CASE表达式 - 就像这样:

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

根据需要添加额外的WHEN表达式或更改ELSE表达式。


你如何将该列保存到数据库中? - Snow
相关问题应该分开提问,但可以研究SQL的INSERT INTO SELECT语句。 - J0e3gan

1
您可以在查询中添加一个case语句:
SELECT id, name, result, CASE result WHEN 1 THEN 100 WHEN 2 THEN 80 ELSE NULL END
from   my_table

如果结果中除了1和2之外还有其他值怎么办? - TTeeple

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

1
作为上面给出的答案也是正确的。但是我会说,如果您在现有列和新列之间有预定义的关系或逻辑,则可以在不使用 CASE 的情况下实现该操作。为所有可能的值编写 CASE 不仅不可能,而且效率低下。
对于您现有的数据,我可以像这样使用它。
SELECT ID, name, result, (20*(6-result)) as NewColumn
FROM YourTable

在这里,我假设1=>1002=>803=>604=>405=>20。当然,这只是为了理解目的。您可以根据实际数据创建自己的表达式。

1
现在我们可以使用NewColumn2 = NewColumn * 100来作为NewColumn2吗? - prem30488

1

您可以在Mysql中使用IF语句

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接