首页 > 解决方案 > T-SQL 更新查询以三个一组的形式输入重复数据

问题描述

我有一张数据表,它在同一张表中重复两次以制作三组。

它的“ReferenceID”是主键,我想以某种方式对 3 个相同的 ReferenceID 进行分组,并将这三个值“f2f”“NF2F”“Travel”以任意顺序注入名为“Type”的行中,但确保每个 ReferenceID 仅具有这些值之一。

例如:

ReferenceID | Type 
------------|-------

    1          f2f
    1          nf2f
    1          Travel
    2          f2f
    2          nf2f
    2          Travel
    3          f2f
    3          nf2f
    3          Travel

等等等等……

可能吗 ?

标签: tsqlsql-server-2012

解决方案


您可以通过您拥有的组数来执行此操作row_numbermod在您的情况下为 3):

declare @t table(RefType varchar(10));
insert into @t values ('f2f'),('nf2f'),('Travel'),('f2f'),('nf2f'),('Travel'),('f2f'),('nf2f'),('Travel');

select (row_number() over (order by RefType) % 3) + 1 as ReferenceID
    ,RefType
from @t
order by ReferenceID
        ,RefType;

输出

+-------------+---------+
| ReferenceID | RefType |
+-------------+---------+
|           1 | f2f     |
|           1 | nf2f    |
|           1 | Travel  |
|           2 | f2f     |
|           2 | nf2f    |
|           2 | Travel  |
|           3 | f2f     |
|           3 | nf2f    |
|           3 | Travel  |
+-------------+---------+

推荐阅读