【发布时间】:2017-03-06 02:43:05
【问题描述】:
我有一个名为 empl_type_multi 的列,它只是一个以逗号分隔的列,每个值都是指向另一个名为自定义标题的表的链接。
例如,我可能在 empl_type_multi 中有以下值:
123, RHN, 458
然后在 custom_captions 表中,这些将是单独的值:
123 = Dog
RHN = Cat
458 = Rabbit
所有这些字段都是 NTEXT。
我要做的是将 empl_type_multi 列转换为 custom_captions 表中的相应名称,因此在上面的示例中:
123, RHN, 458
会变成
Dog, Cat, Rabbit
对此的任何帮助将不胜感激。
-- 编辑 ----------------------------------------- --------------------------
好吧,我设法将这些值转换为相应的标题,并将其全部放入一个临时表中,以下是对该表的 CTE 查询的输出:
ID1 ID2 fName lName Caption_name Row_Number
10007 22841 fname1 lname1 DENTAL ASSISTANT 1
10007 22841 fname1 lname1 2
10007 22841 fname1 lname1 3
10008 23079 fname2 lname2 OPS WARD 1
10008 23079 fname2 lname2 DENTAL 2
10008 23079 fname2 lname2 3
我如何更新它,以便将标题名称下的任何内容添加到 Row_Number 1 的标题名称中,用逗号分隔?
如果我能做到这一点,我需要做的就是删除 Row_Number != 1 的所有记录。
------ 编辑 -------------------------- ----------
第一次编辑的解决方案是:
WITH CTE AS
(
SELECT
p.ID1
, p.ID2
, p.fname
, p.lname
, p.caption_name--
, ROW_NUMBER() OVER (PARTITION BY p.id1ORDER BY caption_name DESC) AS RN
FROM tmp_cs p
)
UPDATE tblPerson SET empType = empType + ', ' + c.Data
FROM CTE c WHERE [DB1].dbo.tblPerson.personID = c.personID AND RN = 2
然后我只是增加 RN = 2 直到我有 0 行受到影响。
这是在我跑完之后:
DELETE FROM CTE WHERE RN != 1 AND Caption_name = ''
【问题讨论】:
-
听起来你需要规范化你的数据结构。
-
这不是我的数据库,我得到了它并被告知将这些数据导出到 Excel 电子表格中。
标签: sql-server tsql