2010-12-14 15 views
2

Nous avons une table qui a le format suivantTransform SQL Table

RecordID FieldName FieldValue 

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

Nous aimerions vous présenter cela comme:

John 30 
Alice 40 

Quelqu'un a une bonne solution pour cela?

+0

Attention l'effet de plate-forme interne: http://en.wikipedia.org/wiki/Inner-platform_effect – Jamiec

Répondre

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

La dernière ligne doit se lire 'ET TV.FieldName = « Age'' –

+0

Spangle Merci @ Paul! Je l'ai corrigé. –

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

Ce n'est pas assez (mais ni est les données), mais cela ne fonctionnera que si vos noms de colonnes sont connus lorsque vous écrivez la requête:

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 

(fonctionne dans MySQL 5.0)

vous devez également utiliser CAST pour obtenir les champs au type correct

Si vous ne connaissez pas les champs, vous aurez besoin de (Programatically) faire une sélection FieldName distincte à l'avance afin de construire votre requête

J'ai le sentiment que le fait quelque chose assez similaire à ce

+0

Il n'y a pas ** group_concat ** dans SQL Server –

1

la création de contenu Drupal Kit (CCK) Pourquoi personne n'utiliser pivot ?

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