将空值设置为重复行,然后仅保留 1 行

Setting Null Values to a duplicate row and then keeping only 1 row

我需要你的帮助。

我的数据库将被配置为指示我们的一些员工共享同一个办公室。

但是会发生什么,例如,当我从那个办公室 space 中删除员工时,我只是将 LastName 和 FirstName 列的值设置为 'null'。这里的问题是我只想保留相同数据的一行值,而不是基本上包含相同数据的两行。

也许有更好的方法来解决这个问题,因为我对此比较陌生,所以我愿意听取本网站专家的建议。

提前致谢,

这是有问题的 SQLFiddle:http://sqlfiddle.com/#!18/c31e3/1

CREATE TABLE tbl_accdb (
    Floor varchar(255),
    Office varchar(255),
    LastName varchar(255),
    FirstName varchar(255) 
);

INSERT INTO tbl_accdb (Floor, Office, LastName, FirstName)
VALUES ('2', 'B-47', 'Smith', 'John');

INSERT INTO tbl_accdb (Floor, Office, LastName, FirstName)
VALUES ('2', 'B-47', 'Doe', 'Jane');

UPDATE tbl_accdb
SET
  LastName = null,
  FirstName = null
WHERE Floor = 2 AND Office = 'B-47';

您要做的第一件事是升级您的数据库。 SQL Server 2008 从今年早些时候开始就不再提供扩展支持,这意味着您甚至无法从您的服务器的 Microsoft 获得安全更新。是时候升级了。

话虽如此,现在让我们来处理 table 结构本身。

我在这里要做的第一件事是将您的数据分成两个 tables - 一个包含办公室信息,一个包含员工数据。

在员工 table 中,我将添加一列作为办公室 table 的外键,这将指示哪个员工在哪个办公室工作 - 因为一个办公室可以有很多员工单一办公室,但一名员工只能在一个主要办公室工作。

CREATE TABLE tblOffice (
    Id int identity(1,1) CONSTRAINT PK_Office PRIMARY KEY,
    Floor int, -- Since this is a number, store it as a number.
    Office varchar(255), -- Do you really need all that length?
    -- Other office related data such as capacity etc'
    CONSTRAINT UX_Office UNIQUE (Floor, Office) 
);

CREATE TABLE tblEmployee (
    EmployeeNumber int CONSTRAINT PK_Employee PRIMARY KEY,
    LastName varchar(255),
    FirstName varchar(255),
    -- Other employee related data such as social security number etc'
    OfficeId int CONSTRAINT FK_Employee_Office REFERENCES TblOffice(Id)
);