从 SQL 中的子查询设置别名

问题描述 投票:0回答:4

在我的 Select 查询中,我只想根据子查询(即另一个表中的值)设置列的别名。这在 SQL Server 2008 中可能吗?

喜欢:

SELECT tax_Amt AS (SELECT tax FROM Purchase.tblTax WHERE tax_ID=@tax_ID) 
FROM Table

有什么办法可以实现上述查询吗?

sql-server sql-server-2008 subquery
4个回答
2
投票

不,您不能在标准 SQL 中动态设置别名或列名。

如果需要,您必须使用动态 SQL:但请注意别名适用于列,因此所有行都具有相同的别名。您无法逐行更改别名

就我个人而言,我会有一个额外的列,称为“TaxType”或类似的列,因为听起来您想改变每行的名称。无论如何,即使所有行都有相同的别名,我也会这样做,所以我的客户端代码需要“TaxType”


1
投票

尝试这样:

SELECT (SELECT tax FROM Purchase.tblTax WHERE tax_ID=@tax_ID) AS tax_Amt  
FROM Table

0
投票

声明@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


-1
投票

@Nithesh - 你找到解决方案了吗?

我需要完成同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.