我在表格中有一列,我希望通过随机分配将其划分为四个相等的组(或列,以较容易实现的方式)。
假设列的行如下所示:
**id**
1
2
3
4
5
6
7
8
9
10
11
12
我希望输出如下:
*id_A id_B id_C id_D*
3 8 5 1
6 2 4 12
11 9 7 10
一种可行的方法是使用newid()以随机顺序显示行,然后为每个组选择每隔5条记录。还有其他更简单的方法可以达到预期的效果吗?
答案 0 :(得分: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