2014-04-25 3 views
2

테이블에 열이 있고 임의의 할당으로 4 개의 동일한 그룹 (또는 열 중 더 쉽게 구현할 수있는 열)으로 나누고 싶습니다. 이 NEWID를 사용하여 임의의 순서로 행을 표시하고 일을열의 행을 4 개의 그룹 또는 열로 나누는

*id_A id_B id_C id_D* 
3  8  5  1 
6  2  4  12 
11 9  7  10 

한 가지 가능한 방법 : 나는처럼되고 출력을 원하는

**id** 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 

:

처럼 열의 행을 보면 가정()를 누른 다음 각 그룹에 대해 다섯 번째 레코드를 번갈아 선택합니다. 원하는 결과를 얻기위한 다른 간단한 방법이 있습니까?

+0

이 행을 열 또는 행으로 그룹화 하시겠습니까? 그리고 왜 ? –

+0

내 목표는 ID 열의 행을 4 개의 그룹으로 나누고 각각의 ID 그룹을 4 분의 1의 사용자에게 할당하는 것입니다 (누가 마찬가지로 4 개의 그룹으로 무작위로 나뉘게됩니다). 따라서 더 쉬운 방법은이 행 (ID 열에서)을 4 개의 다른 열로 나누고이 열의 각 사용자 그룹에 id를 할당하는 것입니다. – SaadH

답변

4

순위 함수를 사용하고 내부 결과를 1/4로 슬라이스 한 다음 분기의 마지막 피벗을 위해 다시 분할 할 수 있습니다. 숙소는 무작위가 아니고 고르게 분포되어 있습니다. 100 개의 행이있는 테이블에서 행 1,25,50 및 100은 column1로 이동합니다. 그러나 guid와 두 개의 내부 쿼리에서 일부 순서를 사용하면 임의성이 생깁니다.

SELECT 
    [1] AS COL_1,[2] AS COL_2,[3] AS COL_3,[4] AS COL_4 
FROM 
(
    SELECT 
     TableID, 
     RowNumber=ROW_NUMBER() OVER (PARTITION BY QuartTile ORDER BY QuartTile), 
     QuartTile 
    FROM 
    (
     SELECT 
      TableID, 
      QuartTile=NTILE(4) OVER(ORDER BY NEWID()) 

     FROM 
      Table 
    )AS Z 
)X 
PIVOT (AVG(TableID) FOR QuartTile IN([1],[2],[3],[4]))AS PVT 
+0

많은 감사. 이것은 내가 정확히 찾고 있었던 것이다. 매우 감사. – SaadH

+0

np, 됐어. 천만에. –

+1

레코드의 무작위 화는 'ORDER BY TableID'를 'ORDER BY NEWID()'로 바꾸면됩니다. – SaadH

관련 문제