2012-09-17 41 views
-3

我想从一个字段中提取3列数据。基本上我有一个字段为了讨论与下列数据的表:T-SQL从单个列字段中提取多列数据

  • 颜色,
  • 型号,
  • 汽车的新年。

据逐项为ID4是颜色,ID5是型号和ID6是新年。使用过滤器,我可以毫无问题地拖出一个数据集,例如。过滤器= 4,5或6.但我不能拉倍数,因为我只是得到标题,根本没有数据。

+6

请将您的问题重新说明给我,但它没有任何意义。添加样本数据以及预期的输出。 – JonH

回答

0

假设你正在使用SQL Server 2005 +,和你的问题确实是“你怎么会在一个表中破一列到基于同一表中的另一场多个命名列”,这里是你的图形化后一个简单的例子题。

给这个数据集:

declare @tbl table (id int, tag char(3), data varchar(255)) 

insert into @tbl values 
(1, 'ID4', 'Red'), (1, 'ID5', 'Toyota'), (1, 'ID6', '1999'), 
(2, 'ID4', 'Blue'), (2, 'ID5', 'Honda'), (2, 'ID6', '2000'), 
(3, 'ID4', 'Green'), (3, 'ID5', 'Nissan'), (3, 'ID6', '2004'), 
(4, 'ID4', 'Red'), (4, 'ID5', 'Nissan'), (4, 'ID6', '1990'), 
(5, 'ID4', 'Black'), (5, 'ID5', 'Toyota'), (5, 'ID6', '2002') 

简单select语句返回此数据:

select * from @tbl 

id tag data 
1 ID4 Red 
1 ID5 Toyota 
1 ID6 1999 
2 ID4 Blue 
2 ID5 Honda 
2 ID6 2000 
3 ID4 Green 
3 ID5 Nissan 
3 ID6 2004 
4 ID4 Red 
4 ID5 Nissan 
4 ID6 1990 
5 ID4 Black 
5 ID5 Toyota 
5 ID6 2002 

pivot查询返回的数据 - 每车一排 - 用颜色,型号和年份作为自己的列:

select id, [ID4] as 'Color', [ID5] as 'Model', [ID6] as 'Year' 
from (select id, tag, data from @tbl) as p 
pivot (max(data) for tag in ([ID4], [ID5], [ID6])) as pvt 
order by pvt.id 

这是怎么输出厕所ks:

id Color Model Year 
1 Red Toyota 1999 
2 Blue Honda 2000 
3 Green Nissan 2004 
4 Red Nissan 1990 
5 Black Toyota 2002