如何使用声明语句更新表

时间:2019-04-29 06:50:27

标签: tsql sql-server-2012

我有此声明声明

declare @ReferralLevelData table([Type of Contact] varchar(10));
insert into @ReferralLevelData values ('f2f'),('nf2f'),('Travel'),('f2f'),('nf2f'),('Travel'),('f2f'),('nf2f'),('Travel');

select (row_number() over (order by [Type of Contact]) % 3) +1 as [Referral ID]
    ,[Type of Contact]
from @ReferralLevelData 
order by [Referral ID]
        ,[Type of Contact];

它没有插入表中,所以我感觉这没有按预期工作,即它没有修改表。

如果它确实有效,我希望修改该语句以使其更新。

此刻表格仅显示此结果


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

编辑: 我想更新表以三个为一组输入重复数据。

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

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

1 个答案:

答案 0 :(得分:2)

您是说以下意思吗?

declare @ReferralLevelData table(
    [Referral ID] int,
    [Type of Contact] varchar(10)
  );

insert into @ReferralLevelData([Referral ID],[Type of Contact])
select
  (row_number() over (order by [Type of Contact]) % 3) +1 as [Referral ID]
  ,[Type of Contact]
from
  (
    values ('f2f'),('nf2f'),('Travel'),('f2f'),('nf2f'),('Travel'),('f2f'),('nf2f'),('Travel')
  ) v([Type of Contact]);

如果适合的话,您还可以使用下一个查询生成数据:

select r.[Referral ID],ct.[Type of Contact]
from
  (
    values ('f2f'),('nf2f'),('Travel')
  ) ct([Type of Contact])
cross join
  (
    values (1),(2),(3)
  ) r([Referral ID]);