当前位置: 代码迷 >> Sql Server >> sql 根据行号转列的有关问题,有没有解决方案
  详细解决方案

sql 根据行号转列的有关问题,有没有解决方案

热度:46   发布时间:2016-04-24 10:22:00.0
sql 根据行号转列的问题,有没有解决方案
比如 1234 行  转成一列   5678 转成一列 ,9 10 11 12 转成一列

01010470
7906
5
1
01010472
7905
5
1
01010474
7905
5
1
------解决方案--------------------
是想要这个想过么
IF OBJECT_ID('tempdb..#test','U') IS NOT NULL DROP TABLE #test
CREATE TABLE #test
(
A CHAR(10)
)
INSERT INTO #test
        ( A)
VALUES  ( 'A'),( 'B'),( 'C'), ( 'D'), ( 'E'), ( 'F'),( 'G'), ( 'H'), ( 'I'), ( 'J')

SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) ID1,*
FROM (
SELECT ((ROW_NUMBER() OVER(ORDER BY GETDATE())-1)/4)+1 ID,* 
FROM #test AS A) A)B
PIVOT(MAX(A) FOR ID IN([1],[2],[3])) p

/*
ID1 1 2 3
1 A          E          I         
2 B          F          J         
3 C          G          NULL
4 D          H          NULL
*/

------解决方案--------------------
引用:
Quote: 引用:

是想要这个想过么
IF OBJECT_ID('tempdb..#test','U') IS NOT NULL DROP TABLE #test
CREATE TABLE #test
(
A CHAR(10)
)
INSERT INTO #test
        ( A)
VALUES  ( 'A'),( 'B'),( 'C'), ( 'D'), ( 'E'), ( 'F'),( 'G'), ( 'H'), ( 'I'), ( 'J')

SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) ID1,*
FROM (
SELECT ((ROW_NUMBER() OVER(ORDER BY GETDATE())-1)/4)+1 ID,* 
FROM #test AS A) A)B
PIVOT(MAX(A) FOR ID IN([1],[2],[3])) p

/*
ID1 1 2 3
1 A          E          I         
2 B          F          J         
3 C          G          NULL
4 D          H          NULL
*/


第一行是 ABCD 第二行是  EFGH 第三行是 IJKL 这样的怎么弄??

IF OBJECT_ID('tempdb..#test','U') IS NOT NULL DROP TABLE #test
CREATE TABLE #test
(
A CHAR(10)
)
INSERT INTO #test
        ( A)
VALUES  ( 'A'),( 'B'),( 'C'), ( 'D'), ( 'E'), ( 'F'),( 'G'), ( 'H'), ( 'I'), ( 'J'),('K'),('L')

SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) ID1,*
FROM (
SELECT ((ROW_NUMBER() OVER(ORDER BY GETDATE())-1)/4)+1 ID,* 
FROM #test AS A) A)B
PIVOT(MAX(A) FOR ID1 IN([1],[2],[3],[4])) p

/*
ID 1 2 3 4
1 A          B          C          D         
2 E          F          G          H         
3 I          J          K          L         
*/

------解决方案--------------------
--drop table tb
create table tb(  name int)
insert into tb
select'01010470'union all
select'7906'union all
select'5'union all
select'1'union all
select'01010472'union all
select'7905'union all
select'5'union all
select'1'union all
select'01010474'union all
select'7905'union all
select'5'union all
select'1'
with cte as
(
 select * ,(row_number () over (  partition by rn order by rn ))  number
 from 
 (select *  ,((row_number () over (  order by getdate())-1)/4)+1  rn from tb ) t 
  相关解决方案