1 つのフィールドから 3 列のデータを取得しようとしています。基本的に、引数用のフィールドがあり、次のデータを含むテーブルがあります。
- 色、
- モデル、
- 車の年。
ID4
色、ID5
型式、年式で項目分けされていID6
ます。フィルターを使用して問題なく 1 つのデータ セットをプルできます。フィルター = 4、5、または 6。ただし、ヘッダーを取得するだけでデータをまったく取得しないため、倍数をプルすることはできません。
1 つのフィールドから 3 列のデータを取得しようとしています。基本的に、引数用のフィールドがあり、次のデータを含むテーブルがあります。
ID4
色、ID5
型式、年式で項目分けされていID6
ます。フィルターを使用して問題なく 1 つのデータ セットをプルできます。フィルター = 4、5、または 6。ただし、ヘッダーを取得するだけでデータをまったく取得しないため、倍数をプルすることはできません。
SQL Server 2005 以降を使用していて、実際に「テーブル内の 1 つの列を同じテーブル内の別のフィールドに基づいて複数の名前付き列に分割する方法」という質問があると仮定すると、質問に基づいてパターン化された簡単な例を次に示します。
このデータセットを与えます:
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
クエリは、データ (車ごとに 1 行) を返し、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