2

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

我有一个查询:

 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将表名附加到字段名,以便更明显的是哪个字段属于哪个表?

4

1 回答 1

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 来简化流程。

于 2013-11-06T12:25:40.647 回答