【发布时间】:2016-04-12 20:45:52
【问题描述】:
我有这个超长的 SQL 查询,现在这个查询的作用如下,创建第一级 Job_No....第二级中的下一个获取所有“BaselineStart”但是这将每个 BaselineStart 与 baseOrSchedStartList 分开,我要做的是为每个 Job_No 设置 1 个 baseOrSchedStartList,并在 baseOrSchedStartList 下设置每个“字符串”。我希望这是有道理的。这是我的查询:
SELECT [Job_No] as '@Key',
(
SELECT ISNULL(UserDate1,ScheduleTasks.BaselineStart) AS 'string'
FROM ScheduleTasks INNER JOIN Schedule ON ScheduleTasks.ScheduleID = Schedule.ScheduleID INNER JOIN V_CONSTAT_ACTUAL_DATES ON V_CONSTAT_ACTUAL_DATES.JOB_NUMBER = Schedule.Job_No WHERE Job_No IN (SELECT JOB_NUMBER
FROM V_CONSTAT_ACTUAL_DATES
WHERE AREA_DESC = 'Orchard Park'
AND (DATE_TO_END IS NOT NULL AND DATE_TO_END >= GETDATE())) AND
(
LibraryTaskID <> 203
AND LibraryTaskID <> 204
AND LibraryTaskID <> 210
AND LibraryTaskID <> 211
AND LibraryTaskID <> 214
AND LibraryTaskID <> 215
AND LibraryTaskID <> 218
AND LibraryTaskID <> 219
AND LibraryTaskID <> 224
AND LibraryTaskID <> 227
AND LibraryTaskID <> 230
AND LibraryTaskID <> 231
AND LibraryTaskID <> 232
AND LibraryTaskID <> 233
AND LibraryTaskID <> 234
AND LibraryTaskID <> 235
AND LibraryTaskID <> 236
AND LibraryTaskID <> 237
AND LibraryTaskID <> 238
AND LibraryTaskID <> 239
AND LibraryTaskID <> 240
AND LibraryTaskID <> 242
AND LibraryTaskID <> 243
AND LibraryTaskID <> 295
AND LibraryTaskID <> 299
AND LibraryTaskID <> 303
AND LibraryTaskID <> 304
AND LibraryTaskID <> 305
AND LibraryTaskID <> 313
AND LibraryTaskID <> 314
AND LibraryTaskID <> 321
AND LibraryTaskID <> 333
)
ORDER BY DATE_TO_END, SortOrder
FOR XML PATH('baseOrSchedStartList'), Type
)
FROM ScheduleTasks INNER JOIN Schedule ON ScheduleTasks.ScheduleID = Schedule.ScheduleID INNER JOIN V_CONSTAT_ACTUAL_DATES ON V_CONSTAT_ACTUAL_DATES.JOB_NUMBER = Schedule.Job_No WHERE Job_No IN (SELECT JOB_NUMBER
FROM V_CONSTAT_ACTUAL_DATES
WHERE AREA_DESC = 'Orchard Park'
AND (DATE_TO_END IS NOT NULL AND DATE_TO_END >= GETDATE())) AND
(
LibraryTaskID <> 203
AND LibraryTaskID <> 204
AND LibraryTaskID <> 210
AND LibraryTaskID <> 211
AND LibraryTaskID <> 214
AND LibraryTaskID <> 215
AND LibraryTaskID <> 218
AND LibraryTaskID <> 219
AND LibraryTaskID <> 224
AND LibraryTaskID <> 227
AND LibraryTaskID <> 230
AND LibraryTaskID <> 231
AND LibraryTaskID <> 232
AND LibraryTaskID <> 233
AND LibraryTaskID <> 234
AND LibraryTaskID <> 235
AND LibraryTaskID <> 236
AND LibraryTaskID <> 237
AND LibraryTaskID <> 238
AND LibraryTaskID <> 239
AND LibraryTaskID <> 240
AND LibraryTaskID <> 242
AND LibraryTaskID <> 243
AND LibraryTaskID <> 295
AND LibraryTaskID <> 299
AND LibraryTaskID <> 303
AND LibraryTaskID <> 304
AND LibraryTaskID <> 305
AND LibraryTaskID <> 313
AND LibraryTaskID <> 314
AND LibraryTaskID <> 321
AND LibraryTaskID <> 333
)
GROUP BY [Job_No]
FOR XML PATH('Job_No'), ROOT('Root')
这个查询返回这个数据:
<Root>
<Job_No Key="ORC0023">
<baseOrSchedStartList>
<string>2015-09-11T08:00:00</string>
</baseOrSchedStartList>
<baseOrSchedStartList>
<string>2015-08-10T16:00:00</string>
</baseOrSchedStartList>
<baseOrSchedStartList>
<string>2015-08-11T16:00:00</string>
</baseOrSchedStartList>
</Job_No>
</Root>
我正在寻找的是以下内容:
<Root>
<Job_No Key="ORC0023">
<baseOrSchedStartList>
<string>2015-09-11T08:00:00</string>
<string>2015-08-10T16:00:00</string>
<string>2015-08-11T16:00:00</string>
</baseOrSchedStartList>
</Job_No>
</Root>
任何帮助将不胜感激。
【问题讨论】:
-
如果您在子查询中将
FOR XML PATH('baseOrSchedStartList'), Type更改为FOR XML PATH(''), ROOT('baseOrSchedStartList'), Type,应该这样做。 -
我刚刚找到了你的后续问题并扩展了我的答案
标签: sql sql-server xml tsql for-xml