0

以前,我试图用逗号将员工以前的所有姓氏保存在表格单元格中(见下文),但我不知道如何。然后有人建议使用规范化,我不确定在这种情况下是否会更容易。我的老板每次编辑帐户信息时都希望在网页上显示员工以前的所有姓氏。简单地说,当朱迪再次改姓时—— her last name Kingsley should be inserted behind Smith。所以,我的问题是回到是否可以在同一个单元格中添加多个姓氏,用逗号分隔,因为我认为当我在网页上使用变量一次显示所有别名时会更简单? 然而,我不知道为此编写代码的复杂性。任何帮助都非常感谢。

当前 SQL 表

+---------------+-----------------+----------------+--------------------+
     People          FirstName         LastName            Alias
+---------------+-----------------+----------------+--------------------+
     002112            Judy             Smith              Hall

首选

+---------------+-----------------+----------------+--------------------+
     People          FirstName         LastName            Alias
+---------------+-----------------+----------------+--------------------+
     002112            Judy            Kingsley         Hall, Smith
4

3 回答 3

1

保持数据库规范化。

人们:

(Id, Firstname, Lastname)

姓氏历史:

(PeopleId, OldLastname, NewLastname, DateChanged)

您可以创建一个视图,该视图将是“ GROUP_CONCAT”类型的查询,以根据需要转换数据。

一个例子:

DECLARE @people TABLE ( id INT IDENTITY(1,1), fname VARCHAR(50), lname VARCHAR(50))
DECLARE @lnameHistory TABLE ( id INT IDENTITY(1,1), people_id INT, lname VARCHAR(50), date_changed DATETIME)

INSERT INTO @people (fname, lname)
VALUES ('john', 'smith'), ('jane', 'doe')

INSERT INTO @lnameHistory (people_id, lname, date_changed)
VALUES (2, 'shakespeare', '2012-01-01'), (2, 'einstein', '2013-12-12')

;WITH group_concat AS
(
    SELECT people_id, LEFT(lnames , LEN(lnames )-1) AS lnames
    FROM @lnameHistory AS o
    CROSS APPLY
    (
        SELECT lname + ', '
        FROM @lnameHistory AS i
        WHERE o.people_id = i.people_id
        ORDER BY date_changed ASC
        FOR XML PATH('')
    ) pre_trimmed (lnames)
    GROUP BY people_id, lnames
)

SELECT p.*, gc.lnames FROM @people p
JOIN group_concat gc ON gc.people_id = p.id

一些语法参考:

于 2013-08-21T15:22:54.670 回答
0

假设您的更新语句是一个存储过程,采用@personId 和@newLastName 参数:

编辑

抱歉,SQL 版本错误。必须按照老派的方式来做!

UPDATE PeopleTable
SET Alias = Alias + ', ' + LastName,
    LastName = @newLastName
WHERE
    People = @personId
于 2013-08-21T15:23:06.583 回答
-1

当您为新的姓氏更新表时,请使用以下内容:

UPDATE <table> SET Alias = Alias + ', ' + LastName, LastName = <newLastName>
于 2013-08-21T15:22:14.590 回答