今儿同学问了我一需求,如下图:
原本表结构:,
要得到的结果:
我的SQL语句:
SELECT DISTINCT Name,code,p.Date
FROM Person
OUTER APPLY(
SELECT
JDate= STUFF(REPLACE(REPLACE(
(
SELECT DISTINCT SUBSTRING(CONVERT(VARCHAR(10),Date,111),9, 2) AS date1
FROM Person
WHERE code='021'
FOR XML AUTO
), '<Person date1="', '|'), '"/>', ''), 1, 1, '')
)p
WHERE code='021'
STUFF
删除指定长度的字符,并在指定的起点处插入另一组字符。
语法:STUFF ( character_expression , start , length ,character_expression )
FOR XML AUTOFOR XML子句的AUTO模式:返回数据表为起表名的元素,每一列的值返回为属性;
OUTER APPLY
CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。
OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。
我这种写法好像复杂了点,你可以先写个函数,有更优的解决方案欢迎指点,谢谢!