SQL和加入SQL Server 2005

问题描述:

假设我在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

您可以使用您的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

从我如何理解你的问题你要实现什么是不可能的。

例子:

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

我想你应该尽量做到在任何应用程序的结果实际使用的映射。如果你需要SQL Server中的输出,我不确定临时表是否可以解决问题。

+0

如果您发布代码,XML或数据样本,请**在文本编辑器中高亮显示这些行,然后单击编辑器工具栏上的“代码示例”按钮({})以很好的格式和语法突出显示它! – 2011-01-20 14:54:43

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 

我不会尝试使用一个表字段名,因为你会增加复杂性的一个额外层。

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