T-SQL从单个列字段中提取多列数据

时间:2012-09-17 20:18:17

标签: tsql

我试图从一个字段中提取3列数据。基本上我有一个字段,为了参数,一个表格包含以下数据:

  • 颜色
  • 模型,
  • 一年的车。

列表为ID4为彩色,ID5为模型,ID6为年。我可以使用过滤器来提取一个数据集,例如。过滤器= 4,5或6.但我不能拉多次,因为我只是得到标题而根本没有数据。

1 个答案:

答案 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