2011-01-20 4 views
0

Supposons que j'ai deux tables dans SQL Server l'une est Emp et l'autre est FieldsInfo.SQL et joindre dans SQL Server 2005

tableau Emp regarde avec des données comme ci-dessous

alt text

tableau FieldsInfo regarde avec des données comme ci-dessous

alt text

Maintenant, je veux joindre les deux tables de telle manière que SQL Le serveur affichera les données de la table Emp, mais le nom du champ sera affiché à partir du FieldsInfo la relation.

Je veux dire Employee ID sera affiché comme nom champ au lieu d'ID et Salary sera affiché comme nom de domaine au lieu de Sal, mais la valeur sera comme la table Emp.

Je ne suis pas capable de générer ce type de sortie après l'avoir rejoint. Alors s'il vous plaît aidez avec le bon script SQL.

grâce

+0

Je suggérerais que votre conception est mauvaise. Nommez les champs que vous voulez qu'ils soient nommés et débarrassez-vous complètement des tables d'informations de champs. Sinon toutes vos requêtes seront en SQL dynamique ce qui est difficile à bien écrire et horrible à tester correctement. C'est une situation de perdre perdre, Fixez-le au niveau de la table. (et ne nommez jamais un ID de champ ID!) – HLGEM

Répondre

4

Vous pouvez utiliser votre table FieldsInfo pour générer l'instruction SQL de manière dynamique.

declare @SQL nvarchar(100) 
set @SQL = '' 

select @SQL = @SQL + FieldName + ' as [' + Description + '], ' 
from FieldsInfo 
where TableName = 'Emp' 

set @SQL = 'select '+ left(@SQL, len(@SQL)-1) + ' from Emp' 

exec sp_executesql @SQL 
+0

wow super ...... merci beaucoup – Thomas

1

De la façon dont je comprends votre question ce que vous essayez d'atteindre n'est pas possible parce que vous aviez besoin d'une dynamique clause qui est non pris en charge.

Exemple:

SELECT EmpName AS *(SELECT TOP 1 Description FROM FieldsInfo WHERE FieldName = 'EmpName')* 
FROM Emp 

Je suppose que vous devriez essayer de faire le mappage dans quelle application les résultats sont effectivement utilisés. Si vous avez besoin de la sortie dans SQL Server, je ne suis pas sûr que les tables temporaires feront l'affaire.

+0

Si vous postez du code, des échantillons XML ou des données, ** veuillez ** mettre en surbrillance ces lignes dans l'éditeur de texte et cliquer sur le bouton "exemples de code" dans la barre d'outils de l'éditeur pour bien le mettre en forme et la syntaxe le mettre en évidence! –

1
declare @SQL nvarchar(100) 
set @SQL = '' 
select @SQL = stuff((select ', ' + [FieldName] + ' as ['+ [Description] +']' 
        from FieldsInfo t2 
        where t2.TableName = t1.TableName 
        for xml path('')),1,1,'') 
    from FieldsInfo t1 
    group by TableName 

set @SQL = 'select '+ @SQL + ' from Emp' 

exec sp_executesql @SQL 
0

Je ne voudrais pas essayer d'utiliser une table pour les noms de champ, comme vous ajouterez une couche supplémentaire de complexité.

SELECT 
    ID [Employee ID], 
    EmpName [Employee Name], 
    Sal [Salary] 
FROM 
    Emp