SQL和加入SQL Server 2005
假设我在SQL Server中有两个表,一个是Emp
,另一个是FieldsInfo
。SQL和加入SQL Server 2005
Emp
表看起来与数据,如低于
FieldsInfo
表看起来与数据,如低于
现在我想以这样的方式,SQL加入两个表服务器将显示来自Emp
表的数据,但字段名将显示从FieldsInfo
表中根据t他的关系。
我的意思是Employee ID
将显示为字段名称,而不是ID和Salary
将显示为字段名称,而不是萨尔但值将是一样Emp
表。
加入后,我无法生成这种类型的输出。所以请帮助正确的SQL脚本。因为你需要一个动态的条款,是不受支持
感谢
您可以使用您的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
太好了......非常感谢 – Thomas 2011-01-20 13:27:49
从我如何理解你的问题你要实现什么是不可能的。
例子:
SELECT EmpName AS *(SELECT TOP 1 Description FROM FieldsInfo WHERE FieldName = 'EmpName')*
FROM Emp
我想你应该尽量做到在任何应用程序的结果实际使用的映射。如果你需要SQL Server中的输出,我不确定临时表是否可以解决问题。
如果您发布代码,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
我会建议你的设计不好。将这些字段命名为您希望他们命名的字段,并完全清除字段信息表。否则,您的所有查询都将在动态SQL中进行,这对于正确测试而言很难写得很好而且很糟糕。这是一个输球失败的情况,将其修正在桌面级别。 (并且从不命名ID字段ID!) – HLGEM 2011-01-20 15:15:18