我需要从SQL Server数据库表构建一些XML。
我需要输出这个XML结构:
<shifts>
<day workDate='2014-11-11'>
<shift startdate='2014-11-11 10:19' enddate='2014-11-11 13:00'>
<shift startdate='2014-11-11 14:00' enddate='2014-11-11 16:00'>
</day>
<day workDate='2014-11-12'>
<shift startdate='2014-11-12 10:19' enddate='2014-11-12 13:00'>
<shift startdate='2014-11-12 14:00' enddate='2014-11-12 16:00'>
</day>
</shifts>我的问题是我的XML数据是重复的。这似乎是因为每个日期都有2条记录,所以我最终得到:
<shifts>
<day workDate='2014-11-11'>
<shift startdate='2014-11-11 10:19' enddate='2014-11-11 13:00'>
<shift startdate='2014-11-11 14:00' enddate='2014-11-11 16:00'>
</day>
<day workDate='2014-11-11'>
<shift startdate='2014-11-11 10:19' enddate='2014-11-11 13:00'>
<shift startdate='2014-11-11 14:00' enddate='2014-11-11 16:00'>
</day>
<day workDate='2014-11-12'>
<shift startdate='2014-11-12 10:19' enddate='2014-11-12 13:00'>
<shift startdate='2014-11-12 14:00' enddate='2014-11-12 16:00'>
</day>
<day workDate='2014-11-12'>
<shift startdate='2014-11-12 10:19' enddate='2014-11-12 13:00'>
<shift startdate='2014-11-12 14:00' enddate='2014-11-12 16:00'>
</day>
</shifts>如果我能抛出一个"SELECT DISTINCT",那就太好了,但是SQL server抱怨说,因为它不能被比较。
The xml data type cannot be selected as DISTINCT because it is not comparable.以下是SQL语句的一部分。为了简洁,我试着删掉了大部分内容,但它“应该”是有意义的。
SELECT dbo.udf_DATEVALUE(err2.ShiftStartDT) [@workDate]
,
(
SELECT err3.Shift [@Shift],
err3.Campus [@Campus],
CASE WHEN murs3.AssistantNum = 0 THEN 1 ELSE 0 END [@isSIC],
err3.ShiftStartDT [@startdate],
err3.ShiftFinishDT [@enddate]
FROM ExamRoomRoster err3
INNER JOIN MU_Roster_Supervisor murs3 ON murs3.ExamRoomRosterID = err3.ExamRoomRosterID
INNER JOIN ExamSupervisor es3 ON es3.ExamSupervisorID = murs3.ExamSupervisorID
WHERE err3.ExamSessionID = 104
AND es3.ExamSupervisorID = 1297
AND dbo.udf_DATEVALUE(err3.ShiftStartDT) = dbo.udf_DATEVALUE(err2.ShiftStartDT)
ORDER BY err3.Shift
FOR XML PATH ('Shift'), type
)
FROM ExamRoomRoster err2
ORDER BY dbo.udf_DATEVALUE(err2.ShiftStartDT)
FOR XML PATH ('Day'), type本质上,ExamRoomRoster表中有多个rose,每个班次对应一个rose,具有开始日期/时间和结束日期/时间值。
我真的很想坚持在一个不同的,然后我认为它会很好。
SELECT DISTINCT dbo.udf_DATEVALUE(err2.ShiftStartDT) [@workDate]
...
FOR XML PATH ('Day'), type是否有其他方法可以在不使用DISTINCT的情况下完成此操作?
谢谢
发布于 2014-11-11 08:28:53
一种方法是使用CTE或子查询
WITH CTE
AS
( -- your current query
)
SELECT distinct col1, col2 ...
FROM
CTE发布于 2014-11-11 08:56:46
尝试对子查询中的结果使用this..Keep,在外部查询中使用distinct。删除子查询内的order by,并将其保留在外部查询中
select Distinct * from (
SELECT dbo.udf_DATEVALUE(err2.ShiftStartDT) [@workDate]
...
FOR XML PATH ('Day'), type) A
ORDER BY A.[@workDate]https://stackoverflow.com/questions/26854989
复制相似问题