我试图从一个字段中提取3列数据。基本上我有一个字段,为了参数,一个表格包含以下数据:
列表为ID4
为彩色,ID5
为模型,ID6
为年。我可以使用过滤器来提取一个数据集,例如。过滤器= 4,5或6.但我不能拉多次,因为我只是得到标题而根本没有数据。
答案 0 :(得分: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
查询返回数据 - 每辆车一行 - Color,Model和Year作为自己的列:
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
这是输出的外观:
id Color Model Year
1 Red Toyota 1999
2 Blue Honda 2000
3 Green Nissan 2004
4 Red Nissan 1990
5 Black Toyota 2002