我有这个表:选择独特的领域
TableA
----------------
ID (pk) Name
1 A
2 B
3 C
4 A
5 D
6 A
7 B
8 A
9 D
10 C
....
我需要随机与SELECT TOP 5 ID, Name FROM TableA
与名称必须是5个记录中是唯一的提取。
我想:
;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]
您的查询工作的SQL Server 2012上刚刚renaming'group'为'[组]'。每次运行不同的结果 – Horaciux
对于SQL Server 2014,它不起作用。 – MoS
请避免张贴您的解决方案作为问题的一部分。相反,回答你自己的问题并接受你自己的答案。这样,人们就会知道问题已经解决。 –