【问题标题】:Normalizing Data on a Table规范化表上的数据
【发布时间】:2011-01-06 03:39:54
【问题描述】:

我需要帮助来转换表格上的数据,将一系列列减少为一列。下面是一个例子:

Frequency_1 integer,
Frequency_2 integer,
Frequency_3 integer,
Frequency_4 integer,

这些列当前包含 1 或 0。只有一列将包含 1。

新列应定义为

Frequency integer

这个新列的值应该在 1 到 4 之间,具体取决于哪个旧列的值 = 1。

您能否建议一个 SQL 命令来完成此操作?

【问题讨论】:

    标签: sql normalization


    【解决方案1】:
    SELECT
        CASE WHEN Frequency_1 = 1 THEN 1 
             WHEN Frequency_2 = 1 THEN 2 
             WHEN Frequency_3 = 1 THEN 3 
             WHEN Frequency_4 = 1 THEN 4 
             ELSE 0 END AS Frequency
    FROM TABLE
    

    【讨论】:

      【解决方案2】:

      如果你愿意,你可以想出更复杂的东西,但为什么不这样做呢?

      SELECT Frequency_1 +
             (Frequency_2 * 2) +
             (Frequency_3 * 3) +
             (Frequency_4 * 4) AS Frequency
      

      要实际进行更改,您可以先创建列,更新新列中的值,然后删除旧列。

      【讨论】:

      • 确实优雅。它适用于此。也不要减少基于案例的问题。所以我也对他们 +1。
      【解决方案3】:
      update table_name
        set frequency = 
          case when frequency_1 = 1 then 1 else
            case when frequency_2 = 1 then 2 else
              case when frequency_3 = 1 then 3 else
                case when frequency_4 = 1 then 4 
                end
              end
            end
          end
      

      【讨论】:

        【解决方案4】:

        像这样:

        select Frequency =
          Frequency_1 * 1 +
          Frequency_2 * 2 +
          Frequency_3 * 3 +
          Frequency_4 * 4
        from ATable
        

        或者这个:

        select Frequency = case
          when Frequency_1 = 1 then 1
          when Frequency_2 = 1 then 2
          when Frequency_3 = 1 then 3
          when Frequency_4 = 1 then 4
          else 0
        end
        from ATable
        

        【讨论】:

          猜你喜欢
          • 2015-02-15
          • 2016-06-06
          • 2015-09-23
          • 1970-01-01
          • 2016-07-23
          • 2013-12-11
          • 2015-07-21
          • 1970-01-01
          相关资源
          最近更新 更多