首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

眩晕的查询

2012-01-03 
求一个眩晕的查询各位老师:过年好求一个查询表A的结构TNamenamevaluea_1地点1的名称南头a_2地点1的位置红

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

表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 北头 占四路 k56 200
地点3 东头 缘华路 k24



(所影响的行数为 3 行)
[解决办法]
行列转换的问题,帮你顶
[解决办法]
CREATE TABLE A(
[TName] varchar(20),
[name] varchar(20),
[value] varchar(20)
)
INSERT INTO A
SELECT 'a_1 ', '地点1的名称 ', '南头 ' UNION ALL
SELECT 'a_2 ', '地点1的位置 ', '红星路 ' UNION ALL
SELECT NULL,NULL,NULL UNION ALL
SELECT 'b_1 ', '地点2的名称 ', '北头 ' UNION ALL
SELECT 'b_2 ', '地点2的位置 ', '占四路 ' UNION ALL
SELECT 'b_3 ', '地点2的代码 ', 'k56 ' UNION ALL
SELECT 'b_4 ', '地点2的金额 ', '200 ' UNION ALL
SELECT 'c_1 ', '地点3的名称 ', '东头 ' UNION ALL
SELECT 'c_2 ', '地点3的位置 ', '缘华路 ' UNION ALL
SELECT 'c_3 ', '地点3的代码 ', 'k24 '

SELECT MAX([name]),MAX(CASE WHEN BB= '1 ' THEN [value] ELSE ' ' END) ST,MAX(CASE WHEN BB= '2 ' THEN [value] ELSE ' ' END) ED,MAX(CASE WHEN BB= '3 ' THEN [value] ELSE ' ' END) DM,MAX(CASE WHEN BB= '4 ' THEN [value] ELSE ' ' END) JE
FROM
(SELECT LEFT([TName],CHARINDEX( '_ ',[TName])-1) AA,STUFF([TName],1,CHARINDEX( '_ ',[TName]), ' ') BB,left([name],3) [name],[value] FROM A) CC
GROUP BY AA
--结果
ST ED DM JE
------ -------------------- -------------------- -------------------- --------------------
NULL
地点1 南头 红星路
地点2 北头 占四路 k56 200
地点3 东头 缘华路 k24

热点排行