如何使用自联接消除具有相同名称的列?

时间:2017-04-20 23:50:53

标签: sql-server tsql reporting-services

在这个存储过程中,我必须使用

def main():

    person = people()
    person2 = people("joel max")



    print(person2.whatname())


    gravity(78,98)


    def gravity(mass,accel):
        force = mass * accel

        return force

if __name__ == "__main__": main() 

因此,我有两个同名的专栏" QuoteGuid"。

然后,当我尝试在SSRS中添加此查询时,出现错误,因为我有2个具有相同名称的列。

我不是这个存储过程的作者,所以我无法理解是否有机会消除或重命名导致此名称的列名。

SELECT * 
FROM @policyData a
LEFT OUTER JOIN ##Temp b ON b.qguid = a.quoteguid
LEFT OUTER JOIN ##Temp c ON c.qguid = a.quoteguid2;

enter image description here

2 个答案:

答案 0 :(得分:1)

只需更改您尝试在最后一个进行另一个左连接的位置,并明确提及所有列名称。

SELECT a.* ,b.*,c.qguid as qguid1
 FROM
              @policyData a
              LEFT OUTER  JOIN ##Temp b on b.qguid = a.quoteguid
              /*Because I am using another LEFT JOIN here, I have two columns namem "qguid"*/
              LEFT OUTER  JOIN ##Temp c on c.qguid = a.quoteguid2;

Another way,

declare @CurDate datetime=getdate()
Declare @CurDate1 varchar(8)


select @CurDate1= replace(convert(varchar(8), @CurDate, 112), ':','') 
select @CurDate1

SET @cols =     STUFF((SELECT  ',' + QUOTENAME(c.locationCode) +@CurDate1
     FROM Catalytic_vw_LocationCodeByLine c WHERE c.linename =@LineName order by c.CompanyName, c.LocationCode
     FOR XML PATH('')),1,1,'')

答案 1 :(得分:0)

如果我正确理解您的问题,您需要使用现有存储过程来获取SSRS报告的数据,并且您无法修改该过程。问题是存储过程返回两个具有相同名称的列,SSRS将不接受数据集中的列。

绕过该调用存储过程并将其结果存储在具有不同列名的临时表中。然后输出临时表内容。这使您可以控制列的名称。见下面的例子。

CREATE PROCEDURE dbo.sp_Test
AS
BEGIN
    SELECT
        1 AS 'Test1',
        2 AS 'Test2',
        3 AS 'Test3',
        3 AS 'Test3'
END

CREATE TABLE #Test
(
    Test1 int,
    Test2 int,
    Test3 int,
    Test4 int
)

INSERT INTO #Test
EXEC dbo.sp_Test

SELECT * FROM #Test

DROP TABLE #Test