将空值设置为重复行,然后仅保留 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)
);
我需要你的帮助。
我的数据库将被配置为指示我们的一些员工共享同一个办公室。
但是会发生什么,例如,当我从那个办公室 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)
);