我想知道如何在SQL中提取以下信息,例如:
ID Hobbies
1 Swimming; Dancing; Zumba
2 Swimming; Eating; Baseball
3 Hockey; Polo; Fishing
现在我只想要按照字母顺序排列第一个字母最少的运动。在这种情况下,它将是:
ID Hobbies (min)
1 Dancing
2 Baseball
3 Fishing
更普遍的问题是,是否有可能“恢复”XML行连接的过程?
PS:我目前正在使用SQL Server 2014,业余爱好没有排序。
创建测试表的代码
CREATE TABLE TestTable
([ID] INT, [Hobbies] varchar(MAX))
;
INSERT INTO TestTable
([ID], [Hobbies])
VALUES
(1, 'Swimming; Dancing; Zumba'),
(2, 'Swimming; Eating; Baseball'),
(3, 'Hockey; Polo; Fishing')
;
谢谢!
答案 0 :(得分:0)
这将扩展您的列表。然后,您可以轻松地添加一个组和分钟(爱好),或者在此表单中轻松地添加您喜欢的任何组合。
WITH CTE_XML
AS
(
SELECT ID,
xml_hobbies = CAST('<t>' + REPLACE(hobbies,'; ','</t><t>') + '</t>' AS XML)
FROM testTable
)
SELECT ID,
hobby = t.value('.','VARCHAR(MAX)')
FROM CTE_XML
CROSS APPLY xml_hobbies.nodes('t') CA(t)
结果:
ID hobby
----------- -------------
1 Swimming
1 Dancing
1 Zumba
2 Swimming
2 Eating
2 Baseball
3 Hockey
3 Polo
3 Fishing