如何删除/重命名SQL中的重复列(不重复行)

时间:2015-05-19 13:39:19

标签: sql sql-server sybase

尝试从Sybase执行OPENQUERY到Microsoft SQL时遇到错误:

  

通过获取的结果集中不允许使用重复的列名   OPENQUERY和OPENROWSET。列名称" PatientID"是重复的。

我构建的查询基于类似的admissionID和patientID加入了2个表。

For Instance:

PatID   AdmID   Loc  PatID  AdmID   Doctor 
1         5      NC    1      5      Smith 
2         7      SC    2      7      Johnson

真正的查询当然比这更多信息。

有没有一种方法可以重命名或删除其中一个AdmID和PatID列?

我试过了:

SELECT * INTO #tempTable
ALTER #tempTable
DROP COLUMN PatID

由于PatID含糊不清,这不起作用。

我也尝试过:

SELECT firstTable.PatID as 'pID', * FROM...

这也不起作用。

2 个答案:

答案 0 :(得分:3)

您必须为两个重复列中的一个添加别名,并在select中至少为其中一个表明确指出特定列(您在其中使用别名的列的列) ):

 SELECT firstTable.PatID as 'pID', firstTable.column2, secondTable.* FROM...

注意,我仍然在secondTable上使用了通配符。

然而....

我完全避免使用*通配符,并尝试始终准确指出您需要的列。

答案 1 :(得分:3)

结果集中允许复制和缺少列名,但在表定义中不允许(尽管给出了错误消息,看起来它们甚至不会在结果集中被允许用于此情况)。因此,如果出现上述任何一种情况,则无法使用SELECT *构造。您需要指定字段,以便可以控制结果集中显示的字段名称。

SELECT *
INTO   #TempTable
FROM   OPENQUERY('SELECT tab1.Field1, tab1.Field2, tab2.Field12...');