日期:2014-05-19  浏览次数:20555 次

求一个较为简单而又麻烦的查询
各位老师:我想将表A的记录查询后得到表B

表A

名称                             代码                   数值
东安屯高度                 DA_G                     20
东安屯温度                 DA_W                     10
张庄高度                     ZZ_W                       5
大山屯温度                 DS_W                     10
大山屯高度                 DS_G                     20
大山屯深度                 DS_S                     45
张庄深度                     ZZ_S                     32
东安屯深度                 DA_S                     65
张庄温度                     ZZ_W                     12

表B

地点                             高度           温度         深度  
东安屯                           20               10           65
张庄                               5                 12           32
大山屯                           20               10           45

------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb
(
名称 varchar(10),
代码 varchar(10),
数值 int
)

insert into tb(名称,代码,数值) values( '东安屯高度 ', 'DA_G ',20)
insert into tb(名称,代码,数值) values( '东安屯温度 ', 'DA_W ',10)
insert into tb(名称,代码,数值) values( '张庄高度 ' , 'ZZ_W ', 5)
insert into tb(名称,代码,数值) values( '大山屯温度 ', 'DS_W ',10)
insert into tb(名称,代码,数值) values( '大山屯高度 ', 'DS_G ',20)
insert into tb(名称,代码,数值) values( '大山屯深度 ', 'DS_S ',45)
insert into tb(名称,代码,数值) values( '张庄深度 ' , 'ZZ_S ',32)
insert into tb(名称,代码,数值) values( '东安屯深度 ', 'DA_S ',65)
insert into tb(名称,代码,数值) values( '张庄温度 ' , 'ZZ_W ',12)

select left(名称,len(rtrim(名称))-2) as 地点,
max(case when right(名称,2) = '高度 ' then 数值 else null end) as 高度,
max(case when right(名称,2) = '温度 ' then 数值 else null end) as 温度,
max(case when right(名称,2) = '深度 ' then 数值 else null end) as 深度
from tb