2011-01-20 162 views
0

假設我在SQL Server中有兩個表,一個是Emp,另一個是FieldsInfoSQL和加入SQL Server 2005

Emp表看起來與數據,如低於

alt text

FieldsInfo表看起來與數據,如低於

alt text

現在我想以這樣的方式,SQL加入兩個表服務器將顯示來自Emp表的數據,但字段名將顯示從FieldsInfo表中根據t他的關係。

我的意思是Employee ID將顯示爲字段名稱,而不是ID和Salary將顯示爲字段名稱,而不是薩爾但值將是一樣Emp表。

加入後,我無法生成這種類型的輸出。所以請幫助正確的SQL腳本。因爲你需要一個動態的條款,是不受支持

感謝

+0

我會建議你的設計不好。將這些字段命名爲您希望他們命名的字段,並完全清除字段信息表。否則,您的所有查詢都將在動態SQL中進行,這對於正確測試而言很難寫得很好而且很糟糕。這是一個輸球失敗的情況,將其修正在桌面級別。 (並且從不命名ID字段ID!) – HLGEM 2011-01-20 15:15:18

回答

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 2011-01-20 13:27:49

1

從我如何理解你的問題你要實現什麼是不可能的。

例子:

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

我想你應該儘量做到在任何應用程序的結果實際使用的映射。如果你需要SQL Server中的輸出,我不確定臨時表是否可以解決問題。

+0

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中高亮顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕({})以很好的格式和語法突出顯示它! – 2011-01-20 14:54:43

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