- 爱易网页
-
MSSQL教程
- 较为简单而又麻烦的查询
日期:2014-05-19 浏览次数:20545 次
求一个较为简单而又麻烦的查询
各位老师:我想将表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