2

我有一张桌子

col1

1
2

和其他表

col1    col2    col3

1          1    data value one                                    
1          2    data value one                                    
2          3    data value two   

我想加入两个表以获得以下结果

col1  col2  col3

1       1    data value one
2       3    data value two

第二个表有重复,但我只需要加入一个(随机)。我尝试过使用内连接、左连接、右连接并始终返回所有行。其实我用SQL Server 2008.

4

3 回答 3

3
select t1.col1, t2.col2, t2.col3 from table1 t1
cross apply
(select top 1 col2, col3 from table2 where col1 = t1.col1 order by newid()) t2
于 2012-11-06T12:21:44.427 回答
0

使用Distinct会消除重复数据,但您确定两行都包含相同的数据吗?

于 2012-11-06T11:49:44.557 回答
0

您可以使用ROW_NUMBER函数以及ORDER BY NEWID()为 col1 中的每个值获取一个随机行:

WITH CTE AS
(   SELECT  Col1,
            Col2,
            Col3, 
            [RowNumber] = ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY NEWID())
    FROM    Table2
)
SELECT  *
FROM    Table1
        INNER JOIN CTE
            ON CTE.Col1 = table1.Col1
            AND CTE.RowNumber = 1 -- ONLY GET ONE ROW FOR EACH VALUE
于 2012-11-06T12:15:30.550 回答