2016-12-07 9 views
0

의 행 번호를 얻을?<pre><code>SELECT top 3 MyId FROM MyTable ORDER BY NEWID() </code></pre> <p></p> 어떻게 행 번호가 1, 2, 3이 될 있도록 그들에게 행 번호를 추가, 무작위 기록 간단한 SQL 등에

UPDATE : 나는 위와 같이 내 질문을 단순화 할 수 있습니다 생각하지만 더 복잡한 것으로 판명

. 여기 풀 버전이 있습니다. 각 사람에 대해 임의의 3 개의 임의 선택 (MyTable)을 제공해야하며, 선택/행 번호는 1, 2 및 3이며, 사람과 선택 항목 사이에는 논리적 인 결합이 없습니다.

SELECT * FROM Person 
LEFT JOIN (
    SELECT top 3 MyId FROM MyTable ORDER BY NEWID() 
) D ON 1=1 

위의 SQL하다의 문제, 분명히

  • , 픽업/행 1, 2, 3을 추가해야
  • 의 수와 어떤 명확하지 않다하는 것으로, 위의 SQL입니다 내가 다른 사람에게 다른 종목 여기

을 줄 필요가있는 반면, 각 사람에게 같은 픽을 줄 것이다 것은 그것을 테스트하는 작업 SQL이다 :

SELECT TOP 15 database_id, create_date, cs.name FROM sys.databases 
CROSS apply ( 
    SELECT top 3 Row_number()OVER(ORDER BY (SELECT NULL)) AS RowNo,* 
    FROM (SELECT top 3 name from sys.all_views ORDER BY NEWID()) T 
) cs 

제발 도와주세요.

참고 : 자신의 구문은, 다른입니다 따라서 솔루션뿐만 아니라 다른 같이이 T-SQL BYT의 MySQL에 대한 하지입니다.

+1

'ROW_NUMBER() OVER에서 유효한 열 이름으로 where 절을 적용 교체' –

+0

@Prdp, 들으하지만, 행 번호는 1, 2가 아닌, 3하지만 임의의 무언가. – xpt

+0

임의로 행을 선택하기 때문에 ('ORDER BY NEWID()'에서 'TOP 3'), 우리와 공유하지 않을 샘플 결과에서 어떤 순서로 기대합니까? – HABO

답변

2

외부 쿼리에 Row_number을 추가하십시오. 이

SELECT Row_number()OVER(ORDER BY (SELECT NULL)),* 
FROM (SELECT TOP 3 MyId 
     FROM MyTable 
     ORDER BY Newid()) a 

논리적으로 TOP 키워드가 Select 후 처리보십시오. 행 번호가 임의로 생성 된 후 3 개의 레코드가 꺼내집니다. 그래서 당신은 원래 쿼리

업데이트

그것은 CROSS APPLY 통해 달성 될 수에서 행 번호를 생성해서는 안된다. 크로스 내부의 열 이름 ((null의 선택)에 의해 ORDER) Person 테이블

SELECT * 
FROM Person p 
     CROSS apply (SELECT Row_number()OVER(ORDER BY (SELECT NULL)) rn,* 
        FROM (SELECT TOP 3 MyId 
          FROM MyTable 
          WHERE p.some_col = p.some_col -- Replace it with some column from person table 
          ORDER BY Newid())a) cs 
+0

필자가 작성한 더 큰 쿼리에 연결하면 원래 쿼리에서 행 번호를 생성해야합니다. 그래서 ** 해결책을 ** 추가해 주시겠습니까? – xpt

+0

@xpt - 죄송 합니다만, 예제 나 세부 사항으로 설명 할 수 없습니다. –

+0

@xpt - 지금 수표 확인 –