【问题标题】:SQL UNPIVOT? is this what i should be using?SQL UNPIVOT?这是我应该使用的吗?
【发布时间】:2012-10-19 10:01:52
【问题描述】:

所以我有这个数据结构

ID  DATE1     STATUS1 DATE2    STATUS2
1   1/1/2012  1       1/1/2012 3
1   3/1/2012  1       1/2/2012 3 
2   2/1/2012  1       3/4/2012 3
3   4/1/2012  1       NULL     3
4   2/1/2012  1       6/2/2012 3

我怎么去...

ID  DATE      STATUS
1   1/1/2012  1
1   1/1/2012  3
1   3/1/2012  1       
1   1/2/2012  3
2   2/1/2012  1       
2   3/4/2012  3
3   4/1/2012  1       
3   NULL      3
4   2/1/2012  1       
4   6/2/2012  3

我最初的猜测可能是使用大量的联合 unpivots?

【问题讨论】:

    标签: sql union unpivot


    【解决方案1】:

    您可以为此使用联合:

    select id, date1 mydate, status1 status
    from mytable
    union all
    select id, date2 mydate, status2 status
    from mytable
    

    如果您想删除欺骗,只需将union all 替换为union

    注意:我将生成的日期列命名为 mydate,因为日期可能是您使用的任何 dbms 中的保留关键字..

    【讨论】:

    • 干杯 :) 速度和准确性都很棒!谢谢:)
    【解决方案2】:

    这里不需要 UNPIVOT。普通的旧 UNION ALL 就足够了。

       SELECT ID, DATE1 DATE, STATUS1 STATUS
         FROM TBL
    UNION ALL
       SELECT ID, DATE2 DATE, STATUS2 STATUS
         FROM TBL
     ORDER BY ID, DATE, STATUS
    

    【讨论】:

      【解决方案3】:

      我认为在您的情况下,一个简单的 UNION 会有所帮助:

      select ID,  DATE1, STATUS1 FROM your_table
      union 
      select ID, DATE2, STATUS2 FROM your_table
      

      【讨论】:

      • omg 很简单!学习如何反透视的兔子洞让我对显而易见的事情视而不见!
      • 很好,如果对您有帮助,请记得投票并标记为答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多