2016-11-15 11 views
1

を選択して、私はこのテーブルを持っている:一意のフィールドに

TableA 
---------------- 
ID (pk) Name 
1   A 
2   B 
3   C 
4   A 
5   D 
6   A 
7   B 
8   A 
9   D 
10  C 
.... 

私はランダムに5つのレコード内で一意である必要があります名前とSELECT TOP 5 ID, Name FROM TableA で抽出する必要があります。

;WITH group 
AS 
(
    SELECT ID, Name, 
      ROW_NUMBER() OVER (PARTITION BY Name ORDER BY NewId()) rn 
    FROM TableA 
) 
SELECT ID, Name 
FROM group 
WHERE rn = 1 

をしかしたびに私は、全く同じ結果になります。

私がしようとしています。

IDのすべての値をランダムに選択する必要があります。名前は常にレコードごとに異なります。

私は問題が理解できることを願っています。何か案は?

解決策が見つかりました。それは動作するようです!

;WITH group 
AS ( 
SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY NewId()) rn FROM TableA) 
SELECT top 5 ID, Name, NewId() [NewId] 
FROM group 
WHERE rn = 1 
ORDER BY [newid] 
+0

あなたのクエリは、SQL Server 2012上で動作するだけで '[グループ]'としてrenaming'group'。それぞれ異なる結果が実行されます – Horaciux

+0

SQL Server 2014では動作しません。 – MoS

+0

あなたの解決策を質問の一部として投稿しないようにしてください。代わりに、あなた自身の質問に答え、あなた自身の答えを受け入れます。そうすれば、人々は問題が解決されたことを知ることができます。 –

答えて

0
CREATE TABLE #test(ID INT ,Name VARCHAR(1)) INSERT INTO #test(ID ,Name) 
SELECT 1,'A' UNION ALL SELECT 2,'B' UNION ALL SELECT 3,'C' UNION ALL 
SELECT 4,'A' UNION ALL SELECT 5,'D'UNION ALL SELECT 6,'A' UNION ALL 
SELECT 7,'B' UNION ALL SELECT 8,'A'UNION ALL SELECT 9,'D' UNION ALL 
SELECT 10,'C' 

SELECT T1.ID ,T1.Name FROM #test T1 
JOIN (SELECT TOP 5 Name FROM #test T2 ORDER BY NEWID() 
) A ON T1.Name = A.Name ORDER BY A.Name 
+0

これは一意の名前を保証するものではありません。 –

+0

選択を実行するたびに、名前がすべてのレコード間で一意であることを保証する必要があります。 – MoS

1

おそらく問題はnewid()はランダムですが、それはシーケンシャルになりがちかもしれないということです。これで問題は解決しますか?

WITH g as (
     SELECT ID, Name, 
      ROW_NUMBER() OVER (PARTITION BY Name ORDER BY RAND(CHECKSUM(NewId()))) as rn 
     FROM TableA 
    ) 
SELECT ID, Name 
FROM g 
WHERE rn = 1; 
+0

同じ結果:--( – MoS

0
;WITH group 
AS 
(
    SELECT ID, Name, 
      ROW_NUMBER() OVER (PARTITION BY Name ORDER BY NewId()) rn 
    FROM TableA 
) 
SELECT top 5 ID, Name, NewId() [NewId] 
FROM group 
WHERE rn = 1 
ORDER BY [newid] 
+0

あなたは今あなたのために働いていますか?それはあなたが投稿したのと同じですが、「ORDER BY」が追加されても意味をなさない。 – Horaciux

関連する問題