加入2个表并避免重复

时间:2018-03-26 16:27:05

标签: sql left-join

我试图通过连接2个现有临时表来在SQL中创建临时表。我的表看起来像:

enter image description here

enter image description here

我正在尝试加入这两张桌子。但是,如果我进行左连接,它会给我很多重复的行,表格如下所示: enter image description here

如您所见,红色数据是重复的,只有第一行的数据是唯一的。我的代码如下:

select 

        CMO.CUSIP,
        CMO.LEVEL1,
        CMO.COUPON,
        CMO.TRANCHE_GROUP as 'Tranche Group',
        CMO.TRANCHE_TYPE as 'Tranche Type',     
        CMO.price as 'Current Price',
        CMO.PREV_PRICE as 'Previous Price',
        CMO.price_dec as 'Color',
        cast (CMO.DataDate as date) as 'Color Date',
        CMO.dealer as 'Dealer',
        CHA.Challenge_Date,
        CHA.Challenge_Price,
        CHA.Updated_Price,
        CHA.Client_Name,
        CHA.Evaluator,
        CHA.Accepted,
        CMO.DATA_DATE

into #cmodatatable
from
        #cmocolortemptable CMO 
        left join #challengetemptbl CHA on CMO.CUSIP = CHA.CUSIP1 

select *
from #cmodatatable

有没有办法避免这种情况?我正试图获得这样的输出:

enter image description here

我将这些数据导出到Tableau中,并且计算Tableau中的不同值变得非常繁琐,这就是我尝试在SQL中执行此操作然后将数据带到Tableau的原因。我想我可能要做一个联盟,但由于表格中的数据不同,我不知道我将如何进行联盟。 在这方面,任何帮助都表示赞赏。 谢谢!

1 个答案:

答案 0 :(得分:0)

您需要在第一个表中引入唯一性,方法是在表中包含row_number,然后加入它们:

示例:

CREATE TABLE #TEMP1(ID INT,NAME VARCHAR(10),AGE INT ,SEX VARCHAR(10))

CREATE TABLE #TEMP2(ID INT,COMP VARCHAR(10))

INSERT INTO #TEMP1 VALUES(1,'A',23,'M')
INSERT INTO #TEMP1 VALUES(1,'B',33,'M')
INSERT INTO #TEMP1 VALUES(1,'C',43,'M')
INSERT INTO #TEMP1 VALUES(1,'D',53,'M')

INSERT INTO #TEMP2 VALUES(1,'COMP')

;WITH CTE1 AS
(
SELECT *,ROW_NUMBER() OVER(ORDER BY ID) RNUM FROM #TEMP1

)
,CTE2 AS
(
SELECT *,ROW_NUMBER() OVER(ORDER BY ID) RNUM FROM #TEMP2)

SELECT *  FROM CTE1 C1 
LEFT OUTER JOIN CTE2 C2
ON C1.RNUM=C2.RNUM