SQL将行转换为列而不使用aggreagate或pivot

时间:2016-09-26 09:37:36

标签: mysql sql sql-server tsql

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

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

有人可以分享一下你如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:2)

这并不是真正将行放到列中。因此,它不是一个需要的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;