当前位置: 代码迷 >> Sql Server >> 求一条数据行转列SQL !
  详细解决方案

求一条数据行转列SQL !

热度:69   发布时间:2016-04-27 13:22:21.0
求一条数据行转列SQL 高手指点 在线等!!
SQL code
--创建数据表CREATE TABLE [dbo].[Tb1](    [AA] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,    [BB] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,    [CC] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]--插入数据值insert into Tb1(AA,BB,CC) values('王1','A1','C1')insert into Tb1(AA,BB,CC) values('王2','A2','C2')insert into Tb1(AA,BB,CC) values('王3','A3','C3')insert into Tb1(AA,BB,CC) values('王4','A4','C4')insert into Tb1(AA,BB,CC) values('王5','A5','C5')insert into Tb1(AA,BB,CC) values('王6','A6','C6')insert into Tb1(AA,BB,CC) values('王7','A7','C7')insert into Tb1(AA,BB,CC) values('王8','A8','C8')insert into Tb1(AA,BB,CC) values('王9','A9','C9')insert into Tb1(AA,BB,CC) values('王10','A10','C10')insert into Tb1(AA,BB,CC) values('王11','A11','C11')insert into Tb1(AA,BB,CC) values('王12','A12','C12')insert into Tb1(AA,BB,CC) values('王13','A13','C13')


原始状态:


查询后显示的状态:


高手们指点哈。

------解决方案--------------------
[email protected],其他是一样的.

SQL code
CREATE TABLE [dbo].[Tb1](    [AA] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,    [BB] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,    [CC] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]--插入数据值insert into Tb1(AA,BB,CC) values('王01','A1','C1')insert into Tb1(AA,BB,CC) values('王02','A2','C2')insert into Tb1(AA,BB,CC) values('王03','A3','C3')insert into Tb1(AA,BB,CC) values('王04','A4','C4')insert into Tb1(AA,BB,CC) values('王05','A5','C5')insert into Tb1(AA,BB,CC) values('王06','A6','C6')insert into Tb1(AA,BB,CC) values('王07','A7','C7')insert into Tb1(AA,BB,CC) values('王08','A8','C8')insert into Tb1(AA,BB,CC) values('王09','A9','C9')insert into Tb1(AA,BB,CC) values('王10','A10','C10')insert into Tb1(AA,BB,CC) values('王11','A11','C11')insert into Tb1(AA,BB,CC) values('王12','A12','C12')insert into Tb1(AA,BB,CC) values('王13','A13','C13')insert into Tb1(AA,BB,CC) values('王14','A14','C14')godeclare @i as intset @i = 2 --这里更改值,可变换显示列数declare @sql varchar(8000)set @sql = ''select @sql = @sql + ',max(case (px-1)/n.cnt when ' + cast(i as varchar) + ' then AA else '''' end) [AA' + cast(i+1 as varchar) + ']'                   + ',max(case (px-1)/n.cnt when ' + cast(i as varchar) + ' then BB else '''' end) [BB' + cast(i+1 as varchar) + ']'                   + ',max(case (px-1)/n.cnt when ' + cast(i as varchar) + ' then CC else '''' end) [CC' + cast(i+1 as varchar) + ']'from (select number i from master..spt_values where type='p' and number < @i) as aset @sql = 'select ' + substring(@sql,2,len(@sql)) + ' from (  select t.* , px = (select count(1) from Tb1 where aa < t.aa) + 1 From Tb1 t) m ,(select (case when count(1)%'+cast(@i as varchar)+' = 0 then count(1)/'+cast(@i as varchar)+' else count(1)/'+cast(@i as varchar)+'+1 end) cnt from Tb1) ngroup by (px-1)%n.cnt'exec(@sql) drop table Tb1/*AA1        BB1        CC1        AA2        BB2        CC2        ---------- ---------- ---------- ---------- ---------- ---------- 王01        A1         C1         王08        A8         C8        王02        A2         C2         王09        A9         C9        王03        A3         C3         王10        A10        C10       王04        A4         C4         王11        A11        C11       王05        A5         C5         王12        A12        C12       王06        A6         C6         王13        A13        C13       王07        A7         C7         王14        A14        C14       */
  相关解决方案