我继承一个DB从我需要在当前布置成行列来提取数据。 检索数据的查询是:
select distinct
LIMSNo, p250.*, p500.*, p750.*, p1000.*
from
results as r
inner join Points250 as p250
on r.resultsid = p250.resultsid and p250.channel = 1
inner join Points500 as p500
on r.resultsid = p500.resultsid and p500.channel = 1
inner join Points750 as p750
on r.resultsid = p750.resultsid and p750.channel = 1
inner join Points1000 as p1000
on r.resultsid = p1000.resultsid and p1000.channel = 1
where
r.limsno between '120053698' and '120053704'
产生
LIMSNo P0001 P0002 P0003 ... P1000
120053698 251.6667 302.0196 302.2353 305.9608
120053699 291.6667 342.6545 347.9635 353.6236
120053700 243.3333 298.3206 296.7235 299.5342
120053701 308.3333 365.8397 365.4071 368.3206
120053702 315 363.4153 366.6052 373.1695
请注意,有1000列(P0001 ... P1000)
我想枢轴/让我得到这个输出旋转数据:
120053698 120053699 120053700 120053701 120053702
P0001 251.6667 291.6667 243.3333 308.3333 315
P0002 302.0196 342.6545 298.3206 365.8397 363.4153
...
P1000 305.9608 353.6236 299.5342 368.3206 373.1695
如何构造SQL查询? 该数据库是SQL 2000。
我已经尝试了许多方法解决这个问题。 我的最新的尝试是:
create table #tempCols
(
ColName nchar(15)
)
insert into #tempCols
select
column_name
from
information_schema.columns
where
table_name = 'Points250'
and column_name like 'P%'
insert into #tempCols
select
column_name
from
information_schema.columns
where
table_name = 'Points500'
and column_name like 'P%'
insert into #tempCols
select
column_name
from
information_schema.columns
where
table_name = 'Points750'
and column_name like 'P%'
insert into #tempCols
select
column_name
from
information_schema.columns
where
table_name = 'Points1000'
and column_name like 'P%'
create table #LIMSList
(
LIMSNumber nchar(9)
)
insert into #LIMSList
select LimsNo from results
where LimsNo between '100030460' and '100030500'
declare @colList varchar(max)
select @colList = COALESCE(@colList + ',' ,'') + ColName from #tempCols
declare @command varchar(max)
set @command =
'
select LimsNo, Point, Data
from (
select LimsNo, p250.*, p500.*, p750.*, p1000.*
from
results as r
inner join Points250 as p250
on r.resultsid = p250.resultsid and p250.channel = 1
inner join Points500 as p500
on r.resultsid = p500.resultsid and p500.channel = 1
inner join Points750 as p750
on r.resultsid = p750.resultsid and p750.channel = 1
inner join Points1000 as p1000
on r.resultsid = p1000.resultsid and p1000.channel = 1
where
limsno in (select LimsNo from #LIMSList)) d
unpivot (Data for Point in (' + @colList + ')) as unpvt
'
print @command
exec(@command)
drop table #tempCols
drop table #LIMSList
但我得到的错误是:
Msg 8156, Level 16, State 1, Line 1
The column 'ResultsID' was specified multiple times for 'd'.
Msg 8156, Level 16, State 1, Line 1
The column 'ResultsID' was specified multiple times for 'unpvt'.