Sql 在同一单元格中插入多个名称(使用逗号分隔)
以前,我试图用逗号(见下文)在表格单元格中保留员工的所有姓氏,但我不知道如何保存。然后有人建议使用规范化,我不确定在这种情况下是否更容易。我的老板希望每次编辑员工的账户信息时,都能在网页上显示员工以前的所有姓氏。简言之,当朱迪再次改名时–她的姓金斯利应该插在史密斯的后面。因此,我的问题是,是否可以在同一个单元格中添加多个姓氏,并用逗号分隔,因为我认为在网页上使用变量一次显示所有的别名会更简单?然而,我不知道为它编写代码的复杂性。非常感谢您的帮助 当前SQL表Sql 在同一单元格中插入多个名称(使用逗号分隔),sql,sql-server-2008,database-design,Sql,Sql Server 2008,Database Design,以前,我试图用逗号(见下文)在表格单元格中保留员工的所有姓氏,但我不知道如何保存。然后有人建议使用规范化,我不确定在这种情况下是否更容易。我的老板希望每次编辑员工的账户信息时,都能在网页上显示员工以前的所有姓氏。简言之,当朱迪再次改名时–她的姓金斯利应该插在史密斯的后面。因此,我的问题是,是否可以在同一个单元格中添加多个姓氏,并用逗号分隔,因为我认为在网页上使用变量一次显示所有的别名会更简单?然而,我不知道为它编写代码的复杂性。非常感谢您的帮助 当前SQL表 +---------------+-
+---------------+-----------------+----------------+--------------------+
People FirstName LastName Alias
+---------------+-----------------+----------------+--------------------+
002112 Judy Smith Hall
首选
+---------------+-----------------+----------------+--------------------+
People FirstName LastName Alias
+---------------+-----------------+----------------+--------------------+
002112 Judy Kingsley Hall, Smith
当您为新的姓氏更新表时,请使用以下内容:
UPDATE <table> SET Alias = Alias + ', ' + LastName, LastName = <newLastName>
更新集别名=别名+,'+LastName,LastName=
保持数据库正常化
人民:
(Id, Firstname, Lastname)
LastnameHistory:
(PeopleId, OldLastname, NewLastname, DateChanged)
您可以创建一个属于“”类型的查询的视图,以根据需要转换数据
例如:
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
一些语法参考:
UPDATE PeopleTable
SET Alias = Alias + ', ' + LastName,
LastName = @newLastName
WHERE
People = @personId
这只是为了显示,还是你老板想在那个牢房里输入姓名的变更?@TonyHopkinson:主要是为了显示,但她认为如果我把所有的旧姓都放在同一个牢房里会更容易。告诉她不要放弃她的日常工作@我的答案就是你想要的。@TonyHopkinson:你这么说真有趣。她很幸运她雇用了你而不是我。否则,她就不得不面对我这样说,尽管可能要更老练一点。我在存储过程中使用了你的代码,但它不起作用。不确定我是否正确。是否尝试设置别名=别名+,'+LastName,?我刚试过,似乎效果不错。是的,我试过了。在我执行它并返回测试我的网页之后,它没有在别名列中插入以前的姓氏。谢谢。当她的老板要找我的时候,找到那个以前姓这个的员工?还有我的,他的,我的呢?部分重复“Hopkinson,Hopkins,Hopkin”@BWS:这就是我的存储过程的样子:
UPDATE People SET Alias=Alias+,“+LastName,LastName=@LastName WHERE CAST(PeopleID AS Varchar(25))=@PeopleID
@TonyHopkinson:你说得对。没有办法强制执行唯一性,但这正是我老板想要的(我阅读了您提供的网页,其中有很多很好的信息,但我不熟悉GROUP_CONCAT中的语法。也许这太难问了。您能否演示如何使用GROUP_CONCAT创建视图?