sql server查询将列中的行分为四个组或列

时间:2014-04-25 18:45:04

标签: sql-server grouping divide

我在表格中有一列,我希望通过随机分配将其划分为四个相等的组(或列,以较容易实现的方式)。

假设列的行如下所示:

**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条记录。还有其他更简单的方法可以达到预期的效果吗?

1 个答案:

答案 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