【问题标题】:SQL Convert Rows to Columns without aggreagate or pivotSQL将行转换为列,无需聚合或透视
【发布时间】:2016-09-26 09:37:35
【问题描述】:

我正在尝试将行转换为列。请看下面的示例:

colname  |  data1 |   data2

---------|--------|------------------------------------
     a   |    1   |
     a   |    2   |
     a   |    3   |
     b   |    4   |
     b   |    5   |
     c   |        |     6  
     c   |        |     7

我希望输出为:

      a  |   b     |   c

---------|--------|------------------------------------
     1   |        |
     2   |        |
     3   |        |
         |    4   |
         |    5   |
         |        |     6  
         |        |     7

有人可以分享您关于如何解决这个问题的想法吗?

【问题讨论】:

  • 请展示你到目前为止尝试了什么??
  • 我不确定如果没有PIVOT 就可以做到这一点,除非你使用了大量的硬编码,一旦你的数据发生变化就会中断。为什么不能使用PIVOT
  • 如果你只是因为你的数据类型是“字符串”而避免 SUM,你仍然可以使用 PIVOT,这是一篇不错的文章,sqlmag.com/t-sql/pivoting-without-aggregation
  • 您使用的是 MySQL 还是 MS SQL Server?
  • 我猜你正在使用 mysql,这就是为什么你不能使用 mssql pivot。看看例如MySQL pivot table

标签: mysql sql sql-server tsql


【解决方案1】:

这并不是真正将行放入列。因此,不需要 PIVOT。
您只想根据 colname 的值在某些列中显示值。
可以使用CASE WHEN

select 
case when colname = 'a' then data1 end as a,
case when colname = 'b' then data1 end as b,
case when colname = 'c' then data2 end as c
from yourtable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 2012-08-12
    • 1970-01-01
    • 2017-03-25
    • 2014-03-02
    • 2016-01-22
    相关资源
    最近更新 更多