在我的 Select 查询中,我只想根据子查询(即另一个表中的值)设置列的别名。这在 SQL Server 2008 中可能吗?
喜欢:
SELECT tax_Amt AS (SELECT tax FROM Purchase.tblTax WHERE tax_ID=@tax_ID)
FROM Table
有什么办法可以实现上述查询吗?
不,您不能在标准 SQL 中动态设置别名或列名。
如果需要,您必须使用动态 SQL:但请注意别名适用于列,因此所有行都具有相同的别名。您无法逐行更改别名
就我个人而言,我会有一个额外的列,称为“TaxType”或类似的列,因为听起来您想改变每行的名称。无论如何,即使所有行都有相同的别名,我也会这样做,所以我的客户端代码需要“TaxType”
尝试这样:
SELECT (SELECT tax FROM Purchase.tblTax WHERE tax_ID=@tax_ID) AS tax_Amt
FROM Table
声明@From int 声明@To int 创建表#Rows ( RowID int not null 主键标识(1,1) , SeqID 整数 , 列名 varchar(100) )
插入#Rows 从 OutputTemplateElements OTE 中选择不同的 SeqID,替换(OTE.Column1, ' ', '_') 其中 TemplateID = @TemplateID 按 SeqID 排序
选择@From=0,@To=@@ROWCOUNT
同时@From<@To BEGIN SET @From=@From+1
Set @ColumnName = (Select ColumnName from #Rows Where RowID = @From)
set @ColumnCheck = (Select count(*)
from sys.all_columns C
Join sys.all_objects O on C.object_id = O.object_id
where O.name like 'ConsumerWorkbenchDetails%'
and charindex(@ColumnName, C.name) > 0)
If @ColumnCheck = 0
Begin
set @sqlString = N'Alter Table ConsumerWorkbenchDetails Add ' + @ColumnName + ' nvarchar(512) NULL '
exec sp_executesql @sqlString
End
结束
删除表#Rows
@Nithesh - 你找到解决方案了吗?
我需要完成同样的事情。