2011-01-20 13 views
0

SQL Serverに2つのテーブルがあるとします.1つはEmp、もう1つはFieldsInfoです。SQLとSQL Server 2005への参加

Empテーブルは

alt text

以下のようなデータが今、私はSQLそのような方法でテーブルの両方に参加したいと

alt text

FieldsInfo表が見えるの下のようなデータとなりますサーバーはEmpテーブルのデータを表示しますが、フィールド名はFieldsInfoからt彼の関係。

Employee IDはIDの代わりにフィールド名として表示され、SalaryはSalの代わりにフィールド名として表示されますが、値はEmpのようになります。

参加後にこのタイプの出力を生成することはできません。だから、正しいSQLスクリプトで助けてください。あなたがサポートされていない節ASダイナミックを必要とするので

おかげで、私はあなたが達成しようとしているものをあなたの質問を理解する方法から、

+0

あなたのデザインが悪いとお考えします。フィールドに名前を付けたい名前を付け、フィールドの情報テーブルをすべて削除します。さもなければ、あなたのすべてのクエリはダイナミックなSQLになります。これは、適切にテストするためにうまく書けないのは難しいです。これは、失う状況を失う、テーブルレベルで修正します。 – HLGEM

答えて

4

FieldsInfoテーブルを使用して、SQL文を動的に構築できます。

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

すごい偉大な......ありがとう – Thomas

1

することはできません。

例:

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

私はあなたが結果が実際に使用されているものは何でもアプリケーションにマッピングを行うようにしてくださいね。 SQL Serverで出力が必要な場合は、テンポラリテーブルがそのトリックを行うかどうかはわかりません。

+0

コード、XML、またはデータサンプルを投稿する場合は、**これらの行をテキストエディタで強調表示し、エディタツールバーの[コードサンプル]ボタン({})をクリックしてくださいきれいに書式を設定し、構文を強調表示する! –

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

あなたは複雑さの余分な層を追加することと同じように、私は、フィールド名のためにテーブルを使用しようとしないでしょう。

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