【问题标题】:SQL Reformatting table columnsSQL 格式化表列
【发布时间】:2013-08-06 07:37:00
【问题描述】:

我现在有一张表格,格式很不方便。
例子:
列:

Quarter / ID  / Sales
1     / 234   / 50
1     / 258  / 100 
2     / 234  / 50 
2     / 456  / 125
3     / 258  / 100
3     / 456  / 75 
3     / 555  / 100  
4     / 555  / 50

这只是一个例子,实际上有 5600 列。

我想重新格式化表格,以便我刚才展示的示例看起来更像:

ID /   Q1   /    Q2    /   Q3    /    Q4
234/   50   /    50    /   0     /     0
258/   100  /    0     /   100   /     0
456/    0   /    125   /   75    /     0
555/    0   /     0    /   100   /     50

有没有办法让我轻松地移动这些列,也许是基于某种对 ID 号的查找?我只需要一个记录中每个 ID 的所有数据,其中包含单独的列,而不是 4 条记录,每个季度一个。

谢谢




---到目前为止,我所做的只是创建一个具有不同 ID 的新表。然后我想使用某种连接或查找插入,可以将所有记录放入 Q1,其中季度 = 1,经销商 = 记录经销商。

【问题讨论】:

    标签: sql-server-2008 sql-update reformat


    【解决方案1】:

    嗯,我想通了。首先我做了一个新表。

    CREATE TABLE newtable (ID varchar (5), Q1 int, Q2 int, Q3 int, Q4 int)
    

    然后我插入了不同的 ID

    INSERT INTO newtable
    SELECT DISTINCT ID
    FROM oldtable
    

    然后对于第一季度,我做了这样的插入语句:

    UPDATE newtable
    SET newtable.Q1 = oldtable.sales
    FROM newtable 
    INNER JOIN oldtable
    ON newtable.ID = oldtable.ID
    WHERE oldtable.quarter = '1'
    

    然后我只是复制并为每个季度执行此操作,更改为 Q2,然后在 WHERE 语句中分别更改为“2”。

    只需确保检查重复项,我的实际数据集有重复项,因为我使用了与另一列配对的选择不同。

    【讨论】:

      【解决方案2】:

      您可以使用 MySQL CASE 语句。

      Select id, 
      max(case when Quarter=1 then sales else null end) Q1,
      max(case when Quarter=2 then sales else null end) Q2,
      max(case when Quarter=3 then sales else null end) Q3,
      max(case when Quarter=4 then sales else null end) Q4
      from your_table_name
      group by id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-18
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        相关资源
        最近更新 更多