SQL Server 2014取代了什么? DeIdentify数据

时间:2015-03-19 20:55:56

标签: sql sql-server sql-server-2014

我将再次解释我想要做什么,希望你可以提供帮助。

表1有4061行,其中包含列 [名称],[地址1],[地址2],[地址3],[市],[状态],[拉链],[国家],[电话]  和其他20个专栏。表1是需要重新识别的数据。表1总共有4061行中有1534个不同的[名称]行。

表2包含自动生成的数据,其中包含相同的列。我想用表2中的数据替换表1中的上述列。我想根据表1中的[Name]选择distinct,然后选择[Name],[Address1],[Address2],[Address3],[城市],[州],[邮编],[国家],[电话]与表2中的一组新的不同数据。

我不想只使用新地址更新每一行,因为这会搞砸数据的一致性。通过仅替换不同,这将允许我在更改表1中的行数据时保持数据一致性。当我完成时,我希望有1534个不同的新的去标识[名称] [地址1],[地址2],[地址3 ],[城市],[国家],[邮编],[国家],[电话]见表2中的表格。

2 个答案:

答案 0 :(得分:0)

您可以在join中使用update。您可以使用row_number()生成1500行的连接键:

update toupdate
    set t.address = f.address
    from (select t.*, row_number() over (order by newid()) as seqnum
          from table t
         ) toupdate join
         (select f.*, row_number() over (order by newid()) as seqnum
          fake f
         ) f
         on toupdate.seqnum = f.seqnum and t.seqnum <= 1500;

答案 1 :(得分:0)

以下是我最终如何做到这一点。 首先,我运行一个语句来选择distinct并将其插入表中。

Select Distinct [Name],[Address1],[City],[State],[Zip],[Country],[Phone]
INTO APMAST2
FROM APMAST

然后我在APMAST2中添加了name2列,并使用语句在APMAST2中创建了一个顺序id字段。

DECLARE @id INT 
SET @id = 0 
UPDATE APMAST2
SET @id = id = @id + 1 
GO 

现在我在APMAST2中有我的不同信息以及空白名称字段和顺序ID字段。现在我可以用我生成的fakenames表来加入这个日期。 HERE使用他们的批量工具。

使用加入声明我使用APMAST2

加入了假数据
Update dbo.APMAST2
    SET dbo.APMAST2.Name = dbo.fakenames.company,
        dbo.APMAST2.Address1 = dbo.fakenames.streetaddress,
        dbo.APMAST2.City = dbo.fakenames.City,
        dbo.APMAST2.State = dbo.fakenames.State,
        dbo.APMAST2.Zip = dbo.fakenames.zipcode,
        dbo.APMAST2.Country = dbo.fakenames.countryfull,
        dbo.APMAST2.Phone = dbo.fakenames.telephonenumber       
        FROM 
        dbo.APMAST2
        INNER JOIN
        dbo.fakenames
        ON dbo.fakenames.number = dbo.APMAST2.id

现在我已经加载了假数据,但我保留了原始名称字段,因此我可以将此数据重新加载到我的完整表ARMAST中,所以现在我可以在ARMAST2和ARMAST之间进行连接。

Update dbo.APMAST
    SET dbo.APMAST.Name = dbo.APMAST2.Name,
        dbo.APMAST.Address1 = dbo.APMAST2.Address1,
        dbo.APMAST.City = dbo.APMAST2.City,
        dbo.APMAST.State = dbo.APMAST2.State,
        dbo.APMAST.Zip = dbo.APMAST2.Zip,
        dbo.APMAST.Country = dbo.APMAST2.Country,
        dbo.APMAST.Phone = dbo.APMAST2.Phone        
        FROM 
        dbo.APMAST
        INNER JOIN
        dbo.apmast2
        ON dbo.apmast.name = dbo.APMAST2.name2

现在我的原始表中包含了所有虚假数据,但它保留了它的完整性,大部分都是如此,因此报告时数据看起来很好但是已经去识别。您现在可以删除APMAST2,或者如果您以后需要将其与其他数据匹配,请保留它。我知道这很长,我相信有更好的方法可以做到这一点,但这就是我做的方式,欢迎提出建议。