2010-12-14 2 views
2

У нас есть таблица, которая имеет следующий форматTransform SQL таблицу

RecordID FieldName FieldValue 

1   Name  John 
1   Age  30 
2   Name  Alice 
2   Age  40 

Мы хотели бы представить это как:

John 30 
Alice 40 

Кто-нибудь есть хорошее решение для этого?

+0

Осторожно внутренний эффект платформы: http://en.wikipedia.org/wiki/Inner-platform_effect – Jamiec

ответ

3
SELECT 
    TN.FieldValue AS ValueName 
, TV.FieldValue AS ValueAge 
FROM dbo.Table1 TN 
INNER JOIN dbo.Table1 TV ON TN.RecordID = TV.RecordID 
    AND TN.FieldName = 'Name' 
    AND TV.FieldName = 'Age' 
+0

Последняя строка должна читать 'И TV.FieldName =«Age'' –

+0

@Paul Spangle спасибо! Я починил это. –

0
declare @a TABLE(RecordId int, FieldName varchar(20), FieldValue varchar(20)) 

insert into @a select 1, 'Name', 'John' 
insert into @a select 1, 'Age', '30' 
insert into @a select 2, 'Name', 'Alice' 
insert into @a select 2, 'Age', '40' 

select 
records.RecordId 
, name.fieldvalue [Name] 
, age.fieldvalue [Age] 
from 
(select distinct recordid from @a) records 
inner join @a name on records.recordid = name.recordid and name.fieldname = 'Name' 
inner join @a age on records.recordid = age.recordid and age.fieldname = 'Age' 
0

Это не очень (но ни это данные), но это будет работать, если известны имена столбцов при написании запроса:

SELECT 
RecordId, 
group_concat(if(FieldName = 'name', FieldValue, '') SEPARATOR '') AS person_name, 
group_concat(if(FieldName = 'age', FieldValue, '') SEPARATOR '') AS person_age 
FROM test_table 
GROUP BY RecordId 

(работает в MySQL 5.0)

вы должны также использовать CAST, чтобы получить поля для правильного типа

Если вы не знаете, поля, вам нужно (Программно) сделать выберите отчетливый FieldName заранее для того, чтобы построить свой запрос

У меня есть чувство Drupal Content Kit Создание (ССК) делает что-то весьма похожее на этот

+0

В SQL Server отсутствует ** group_concat ** –

1

Почему никто не использовать стержень ?

declare @a TABLE(RecordId int, FieldName varchar(20), FieldValue varchar(20)) 

insert into @a select 1, 'Name', 'John' 
insert into @a select 1, 'Age', '30' 
insert into @a select 2, 'Name', 'Alice' 
insert into @a select 2, 'Age', '40' 

select * 
from @a a pivot (max(FieldValue) for FieldName in (Name,Age)) p 
Смежные вопросы