其实就是两种数据变换,具体如下:
一、行转列
1、原数据:

2、想要结果:
CI 频点
1 11
1 12
1 13
1 14
1 15
1 16
2 21
2 22
2 23
2 24
2 25
2 26
2 27
3 31
3 32
3 33
3 34
3 35
3 36
3 37
3 38
3、导入数据:
create table TB1 (CI nvarchar(10),[频点1 ] real,[频点2] real,[频点3] real,[频点4] real,[频点5] real,[频点6] real,[频点7] real,[频点8] real)
insert into TB1 values('1',11,12,23,14,15,16,null,null)
insert into TB1 values('2',21,22,23,24,25,26,27,null)
insert into TB1 values('3',31,32,33,34,35,36,37,38)
二、列转行
1、原数据:

2、想要结果:
CI 频点1 频点2 频点3 频点4 频点5
1 11 12 13
2 22 23 24 25
3 33 34 35 36 37
3、导入数据:
create table TB1 (CI nvarchar(10),[频点] real)
insert into TB1 values('1',11)
insert into TB1 values('1',12)
insert into TB1 values('1',13)
insert into TB1 values('1',14)
insert into TB1 values('1',15)
insert into TB1 values('1',16)
insert into TB1 values('2',21)
insert into TB1 values('2',22)
insert into TB1 values('2',23)
insert into TB1 values('2',24)
insert into TB1 values('2',25)
insert into TB1 values('2',26)
insert into TB1 values('2',27)
insert into TB1 values('3',31)
insert into TB1 values('3',32)
insert into TB1 values('3',33)
insert into TB1 values('3',34)
insert into TB1 values('3',35)
insert into TB1 values('3',36)
insert into TB1 values('3',37)
insert into TB1 values('3',38)
------解决方案--------------------
--第一個問題:
select CI ,[频点] from #TB1
unpivot
(
[频点] for x in
([频点1 ],[频点2],[频点3],[频点4],[频点5],[频点6],[频点7],[频点8])
) a
------解决方案--------------------
--第二個問題:
create table #TB1 (CI nvarchar(10),[頻點] real)
insert into #TB1 values('1',11)
insert into #TB1 values('1',12)
insert into #TB1 values('1',13)
insert into #TB1 values('1',14)
insert into #TB1 values('1',15)
insert into #TB1 values('1',16)
insert into #TB1 values('2',21)
insert into #TB1 values('2',22)
insert into #TB1 values('2',23)
insert into #TB1 values('2',24)
insert into #TB1 values('2',25)
insert into #TB1 values('2',26)
insert into #TB1 values('2',27)
insert into #TB1 values('3',31)
insert into #TB1 values('3',32)
insert into #TB1 values('3',33)
insert into #TB1 values('3',34)
insert into #TB1 values('3',35)
insert into #TB1 values('3',36)
insert into #TB1 values('3',37)
insert into #TB1 values('3',38)
SELECT *,'頻點'+RTRIM(ROW_NUMBER() OVER(PARTITION BY CI ORDER BY [頻點])) re
INTO #TB2
FROM #TB1
declare @sql varchar(max)
select @sql = isnull(@sql + '],[' , '') + re from (SELECT DISTINCT re FROM #TB2) a
set @sql = 'select * from #tb2 a pivot (max([頻點]) for re in ([' + @sql + '])) b'
EXEC(@sql)