求一个眩晕的查询
各位老师:
过年好
求一个查询
表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 北头