重命名SELECT中的表中的所有列

时间:2014-01-11 22:32:57

标签: sql sql-server sql-server-2012

我有一个SELECT查询,它多次引用同一个表。它基本上转到Orders表和针对Users表的交叉引用字段以获取信息。

SELECT o1.orderid,
       o1.productname,
       u1.*,
       u2.*,
       u3.*
FROM   orders o1
       INNER JOIN users u1
               ON o1.customer = u1.username
       INNER JOIN users u2
               ON o1.supplier = u2.username
       INNER JOIN users 3
               ON o1.manufacturer = u3.username 

u1,u2,u3都会返回相同的字段名。我实际上希望u1返回其前缀为“customer”的列,而u2则返回其前缀为“supplier”的列,依此类推。

所以我最终得到了例如:

u1.AddressLine1 AS 'CustomerAddressLine1'
u2.AddressLine1 AS 'SupplierAddressLine1'
u3.AddressLine1 AS 'ManufacturerAddressLine1'

我不想为每一列编写类似上面的代码,这将花费太长时间。是否有一种简单的方法可以一次性重命名它们?

2 个答案:

答案 0 :(得分:3)

没有自动方法可以做到这一点。但是,您可以很容易地生成代码。

例如:

select '      u1.'+column_name+' as customer_'+column_name+','
from Information_Schema.columns
where table_name = 'users' and schema_name = 'dbo';

然后,您可以将结果复制到查询中。

答案 1 :(得分:1)

不在SQL中没有。只需在您喜欢的编辑器中编写一个宏来编写“AS”部分。

re:我不想为每一列编写如上所示的代码,这将花费太长时间。

这就是软件工程的全部意义所在。做对了。