希望有人可以帮助我。我有一个表,其列的值可以是单个值,也可以是逗号分隔的值,它们是所有单个字母值。我希望能够(在演示级别)显示字母值的实际名称。这就是我想要的东西
原始结果
PersonID MentorList 1 A 2 K, L 3 F
我想要什么
PersonID MentorList 1 Big Brother/Big Sister 2 Youth Motivators, Other Mentoring 3 Gear Up
我已尝试过以下SQL语句,但它没有产生我想要的结果
SELECT PersonID, REPLACE(REPLACE(MentorList, 'A', 'Big Brother/Big Sister'), 'B', 'Best Buddies') AS MentorList FROM Mentors
我得到以下
PersonID MentorList 1 Best Buddiesig Best Buddiesrother/Best Buddiesig Sister 2 Youth Motivators, Other Mentoring 3 Gear Up
正如您所看到的,查询语句将使用" Best Buddies"替换所有B。在第一行。如何让它以我想要的方式工作?
先谢谢...
答案 0 :(得分:2)
如果您真的想要使用链式REPLACE,那么首先用不可能干扰的东西(例如#A,#B,......)替换每个字母,然后替换#A,#B,......通过您想要的实际扩展文本。
但为什么不单独访问这些值?为什么将它存储为串联字符串?
您可能应该有一个带有 MentorLetter 作为主键的表导师,以及一个字段MentorFullName。然后是一个包含( MentorLetter , PersonId )的链接表,每人的导师数量超过导师数。
祝你好运。答案 1 :(得分:0)
以下是我创建的一个示例,希望它可以帮助或指导您解决您的要求:
-- create a temp table to store Letters and their description
CREATE TABLE #Test1
(
ID int identity(1,1),
Letter varchar(10),
LetterDescription varchar(100)
)
GO
--Insert letter into temp table
INSERT INTO #Test1(Letter, LetterDescription)
SELECT 'K', 'Youth Motivators'
INSERT INTO #Test1(Letter, LetterDescription)
SELECT 'L', 'Other Mentoring'
INSERT INTO #Test1(Letter, LetterDescription)
SELECT 'F', 'Gear Up'
--@Value is just a variable I use to test, your can replace this with a table
DECLARE @Value VARCHAR(20)
SELECT @Value = 'K'
-- SELECT @Value = 'K,L'
--Query to do the job
SELECT @Value AS AcualChar,
CASE WHEN Desc2 IS NULL THEN Desc1 ELSE Desc1 + ','+ Desc2 END AS MentorList
FROM
(
SELECT T.LetterDescription AS Desc1, y.Desc2 FROM
(
SELECT
CASE WHEN Charindex(',', @Value) > 0 THEN Substring(@Value, 1,Charindex(',', @Value)-1) ELSE @Value END AS Letter1
) AS L
JOIN #Test1 AS T ON L.Letter1 = T.Letter
FULL OUTER JOIN
(
SELECT T.LetterDescription AS Desc2 FROM
(
SELECT
CASE WHEN Charindex(',', @Value) > 0 THEN Substring(@Value, Charindex(',', @Value)+1, LEN(@Value)) ELSE '' END Letter2
) AS L
JOIN #Test1 AS T ON L.Letter2 = T.Letter
) as y ON 1=1
) X
GO
--Drop the temp table
DROP TABLE #Test1