【问题标题】:add a temporary column in SQL, where the values depend from another column在 SQL 中添加一个临时列,其中的值取决于另一列
【发布时间】:2014-03-20 01:58:38
【问题描述】:

我有这张桌子:

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 中查询?

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案1】:

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

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

    【讨论】:

    • 如果结果中除了1和2之外还有其他值怎么办?
    【解决方案2】:
    SELECT ID
    ,name
    ,result
    ,NewColumn = CASE WHEN result = 1 THEN 100 WHEN result = 2 THEN 80 END 
    FROM Table1
    

    【讨论】:

      【解决方案3】:

      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 表达式。

      【讨论】:

      • 如何在数据库中保存该列?
      • 相关问题应该单独问,但是看SQL的INSERT INTO SELECT语句。
      【解决方案4】:

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

      对于您现有的数据。我可以像这样使用它

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

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

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

      【讨论】:

      • 现在我们可以使用 NewColumn2 = NewColumn * 100 作为 NewColumn2 了吗?
      【解决方案5】:

      你会在 Mysql 中使用 IF 语句

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-28
        • 2022-01-26
        • 1970-01-01
        • 2021-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多