使用Select *将表名附加到字段名称

时间:2013-11-06 11:59:16

标签: sql sql-server sql-server-2008-r2

很抱歉,如果这是重复的话。我搜索过但只找到别名字段和表格。

我有一个问题:

 SELECT *
FROM MyTable1 ca LEFT OUTER JOIN MyTable2 dcn ON dcn.dstrct_code = ca.dstrct_code
                       LEFT OUTER JOIN MyTable2 cdn ON cdn.dstrct_code = ca.cost_dstrct_cde
                       LEFT OUTER JOIN MyTable3 bb ON bb.supplier_code = ca.supplier_code
 WHERE ca.dstrct_code = '0001'                                 
 AND ca.req_232_type = 'P'
 AND ca.requisition_no = '264982  000'
 AND ca.alloc_count = '01'
ORDER BY ca.alloc_count ASC

请不要使用*我没有完成查询。如果我执行这个查询,我得到一行数据,但是我从中选择的表都有很多字段,而且很多都是按字面命名的。所以我的问题是......无论如何都要select * from并将表名附加到字段名称,以便更明显哪个字段属于哪个表?

1 个答案:

答案 0 :(得分:3)

我认为没有办法直接这样做,但你可以这样做。运行如下查询:

SELECT 
    (case t.name when 'MyTable1' then 'ca' when 'MyTable2' then 'dcn' when 'MyTable3' then 'cdn' when 'MyTable4' then 'bb' end)
    + '.' + c.name
    + ' AS "' + t.name + '.' + c.name + '",'
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE t.name in ('MyTable1', 'MyTable2', 'MyTable3', 'MyTable4')
ORDER BY t.name

运行它,最好将结果显示为文本(Ctrl + T),然后在原始查询中使用结果而不是*。您必须从最后一行手动删除逗号。

如果您喜欢这种方法,可以使用一些动态SQL简化流程。