2017-02-08 22 views
7

テーブルから1つのランダムな行を返す方法を理解しようとしています。表には、1つのアカウントにつき複数の行があり、場合によっては1つの行しかありません。私は自分の選択でランダムな結果を得ることができるようにしたいので、毎日同じステートメントを実行して別の結果が得られるかもしれません。SQL Server 2014グループ内のランダム値

これは、クエリの基礎です:

select number, phonenumber 
from phones_master with(nolock) 
where phonetypeid = '3' 

これは、サンプルの結果がNumberという列がアカウントです

number   phonenumber  
-------------------------- 
4130772,  6789100949  
4130772,  6789257988 
4130774,  6784519098 
4130775,  6786006874 

を設定しています。私は単一のランダムな行を返すしたいと思います。したがって、上記のサンプル結果セットに基づいて、クエリは3行を返す必要があります。

ご意見をいただければ幸いです。私はこの壁で頭を打ちのめす。あなたが別のテーブルを持っている場合は

おかげ

+2

なぜ ''(NOLOCK)WITH?つまり、「ダーティデータを読み取る」ことを意味し、「ロックを取らない」ことを意味します。ロックの問題がある場合は、SNAPSHOT ISOLATION –

答えて

8

あなたはROW_NUMBER()(例えば)

Select Top 1 with ties * 
From YourTable 
Order by Row_Number() over (Partition By Number Order By NewID()) 

戻り

number phonenumber 
4130772 6789257988 
4130774 6784519098 
4130775 6786006874 
+3

に「Top 1 with ties'」に切り替えることを検討してください。 –

+1

@Prdp私はそのコンセプトには功績を残したいと思いますが、私はそれほど明るくありません。 –

0

でのコンサートでTIES WITH を使用することができますaccountと呼ばれ、そのnumber'sが生成/作成された場合、ここにはCross Applyを使用する一方向性があります。

SELECT at.number, 
     cs.phonenumber 
FROM account_table at 
     CROSS apply(SELECT TOP 1 phonenumber 
        FROM phones_master pm 
        WHERE at.number = pm.number 
          AND phonetypeid = '3' 
        ORDER BY Newid()) cs (phonenumber) 

また、これはnumberaccount内のテーブルが一意であると見なします。

phones_masterテーブルにnumberphonetypeidIndexを作成すると、パフォーマンスを向上させる必要があります

関連する問題