SQL分割查询结果

今儿同学问了我一需求,如下图:

原本表结构:

要得到的结果:

我的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 AUTO

  FOR XML子句的AUTO模式:返回数据表为起表名的元素,每一列的值返回为属性;

OUTER APPLY
 CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。
 OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。


我这种写法好像复杂了点,你可以先写个函数,有更优的解决方案欢迎指点,谢谢!
posted @ 2011-03-14 16:39  peter cheng  阅读(1380)  评论(0编辑  收藏  举报