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

求一个眩晕的查询
各位老师:
      过年好
求一个查询

表A的结构
TName       name                               value
a_1           地点1的名称                 南头  
a_2           地点1的位置                 红星路

b_1           地点2的名称                 北头
b_2           地点2的位置                 占四路
b_3           地点2的代码                 k56
b_4           地点2的金额                 200

c_1           地点3的名称                 东头
c_2           地点3的位置                 缘华路
c_3           地点3的代码                 k24

想通过查询表a得到下面的表B(备注:如果表A中没有的记录就空下,比如表B中的第一条记录的代码   、金额都是空着)

地点名称     名称       位置           代码         金额    

地点1           南头       红星路
地点2           北头       占四路       k56           200
地点3           东头       缘华路       k24

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

create table tb
(
TName varchar(10),
name varchar(20),
value varchar(10)
)

insert into tb(TName,name,value) values( 'a_1 ', '地点1的名称 ', '南头 ')
insert into tb(TName,name,value) values( 'a_2 ', '地点1的位置 ', '红星路 ')
insert into tb(TName,name,value) values( 'b_1 ', '地点2的名称 ', '北头 ')
insert into tb(TName,name,value) values( 'b_2 ', '地点2的位置 ', '占四路 ')
insert into tb(TName,name,value) values( 'b_3 ', '地点2的代码 ', 'k56 ')
insert into tb(TName,name,value) values( 'b_4 ', '地点2的金额 ', '200 ')
insert into tb(TName,name,value) values( 'c_1 ', '地点3的名称 ', '东头 ')
insert into tb(TName,name,value) values( 'c_2 ', '地点3的位置 ', '缘华路 ')
insert into tb(TName,name,value) values( 'c_3 ', '地点3的代码 ', 'k24 ')

select
left(name,3) as 地点名称,
max(case when right(rtrim(name),2) = '名称 ' then value else ' ' end) as 名称,
max(case when right(rtrim(name),2) = '位置 ' then value else ' ' end) as 位置,
max(case when right(rtrim(name),2) = '代码 ' then value else ' ' end) as 代码,
max(case when right(rtrim(name),2) = '金额 ' then value else ' ' end) as 金额
from tb
group by left(name,3)

drop table tb

--result
地点名称 名称 位置 代码 金额
-------- ---------- ---------- ---------- ----------
地点1 南头 红星路
地点2 北头