从表中获取两个随机记录(在一个属性中不同)

时间:2016-12-16 21:20:38

标签: sql sql-server tsql

非常简单的表作为示例,但不知道如何实现这一点:

示例:表1

$total_expressions

两个随机记录:我知道我可以这样做

 ColumnA   ColumnB
   1          A
   1          B
   2          C

但是现在我想选择两个随机记录,但不能是A组同时具有'1'的组合,这意味着结果不能接受'1 A'和'1 B',其余的是细

有什么想法吗?提前致谢

2 个答案:

答案 0 :(得分:2)

    DROP TABLE #T
    CREATE TABLE #T(ID INT
                    ,Vals CHAR(2)
                    )
    INSERT INTO #T VALUES
    (1,'A')
    ,(1,'B')
    ,(2,'A')
    ,(2,'C')
    ,(3,'D')
    ,(4,'E')
    ,(5,'E')


    SELECT TOP 2
        ID,
        Vals
    FROM
    (
    SELECT 
        ID
        ,VALS
        ,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY NEWID()) Rnk
    FROM
        #T) T
    WHERE
        Rnk = 1
order by NewID()

答案 1 :(得分:1)

这是一种方法,但如果你的桌子非常大,它可能会变得昂贵:

;With Random As
(
    Select  *,
            Row_Number() Over (Partition By ColumnA Order By NewId()) As RN
    From    Table1
)
Select  Top 2 ColumnA, ColumnB 
From    Random
Where   RN = 1
Order By NewId()