当前位置: 代码迷 >> Sql Server >> 旧事重提,SQL行转列,该怎么处理
  详细解决方案

旧事重提,SQL行转列,该怎么处理

热度:46   发布时间:2016-04-24 09:23:00.0
旧事重提,SQL行转列
表中有ID,Name字段
客户要求最多显示显示30个name字段

问一下怎样实现?

因为表中name的值不固定所以不像网上写的那些,张三,李四,语文数学等

我的想法是能动态给取出来的数据起个固定的表头,比如COL1 一直到 Col30

最好能写一个sql

谢谢
------解决思路----------------------

select [1] 'Co1',[2] 'Co2',[3] 'Co3',[4] 'Co4',[5] 'Co5',[6] 'Co6',[7] 'Co7',[8] 'Co8',[9] 'Co9',[10] 'Co10',
       [11] 'Co11',[12] 'Co12',[13] 'Co13',[14] 'Co14',[15] 'Co15',[16] 'Co16',[17] 'Co17',[18] 'Co18',[19] 'Co19',[20] 'Co20',
       [21] 'Co21',[22] 'Co22',[23] 'Co23',[24] 'Co24',[25] 'Co25',[26] 'Co26',[27] 'Co27',[28] 'Co28',[29] 'Co29',[30] 'Co30'
from
(select rn,Name
 from
 (select ID,
         Name,
         row_number() over(order by ID) 'rn' 
  from Table_A) t
 where rn<=30
) u
pivot(max(Name) for rn in([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
                          [11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
                          [21],[22],[23],[24],[25],[26],[27],[28],[29],[30])) p

/*
Co1        Co2        Co3        Co4        Co5        Co6        Co7        Co8        Co9        Co10       Co11       Co12       Co13       Co14       Co15       Co16       Co17       Co18       Co19       Co20       Co21       Co22       Co23       Co24       Co25       Co26       Co27       Co28       Co29       Co30
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
A1         A2         A3         A4         A5         A6         A7         A8         A9         A10        A11        A12        A13        A14        A15        A16        A17        A18        A19        A20        A21        A22        A23        A24        A25        A26        A27        A28        A29        A30

(1 row(s) affected)
*/