我遇到了一些代码给我的问题。它不是按照它应该连接的行。我从3个表中选择要连接的行。我有一个Comment
,WorkOrderT
和WorkMaterial_nonFiltered
表。for xml路径不连接SQL Server中的SQL查询中的行
Comment
表显然有意见,并且与WorkMaterial_nonFiltered
表相关联。 WorkMaterial_nonFiltered
表连接到WorkOrderT
表,这是工单ID的位置。
我正在尝试使用工单ID来获取该工单的所有注释,并将它们全部连接到每个工单ID的一行中。这里是代码,因为我目前拥有它:
select
wo.WOId as ID,
STUFF(cast((select distinct '; ' + c.comments
from working.Comment c
where c.Instance_InstanceId = wm.id
for xml path(''), type) as varchar(max)), 1, 1, ' ') as MaterialComments
from
working.WorkOrderT wo
left join
working.WorkMaterial_nonFiltered wm on wm.WorkOrder = wo.WOId
where
wo.WOId = '00559FB6-4DD2-4762-8DE1-8D1B13962AED'
order by
[MaterialComments]
当我运行这个我得到11行作为结果。第一个将MaterialComments
作为NULL
,然后其他人在其中有数据。我不关心NULL
行,除非是导致问题的原因,我需要将其他人连接在一起,并用“;”分隔。我已经尝试了一步一步地完成这一步,但我一直无法弄清楚为什么我总是得到11行而不是1。我已经研究了以下其他问题以尝试找到解决方案:
Concatenate many rows into a single text string?
Concatenate Rows using FOR XML PATH() from multiple tables
How to make a query with group_concat in sql server
String Aggregation in the World of SQL Server
到目前为止,我还没有能够从这些链接得到任何建议为我工作我仍然得到11行而不是1连续行。
编辑
下面是我在我的表中的一些样本数据:(注知道如何做出草率格式化这个实际的表遗憾)
WorkOrderID Comments
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/17 caj in transit; expected delivery on 5/18 per ups 1Z25AR580319345668
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/18 caj updated esd on 6/17 per vendor site
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/17 caj allocated to ship
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/17 caj updated esd on 5/27 per vendor site
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/18 caj processed; no udpated delivery date per estes Tracking #/BOL #: 3SNS31780960
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/18 caj processed; no updated delivery date per ups 1Z39ER600354622348
008FC1D1-D6A6-4E48-A69F-168DBF8D215A Jun 25 2015 10:22AM;dlb223;6/25 dlb 1Z4370490304215160 to be dlv'd today
008FC1D1-D6A6-4E48-A69F-168DBF8D215A Jun 8 2015 1:11PM;klh323;6/8 klh Reserved to meet 06/30 requested delivery date
008FC1D1-D6A6-4E48-A69F-168DBF8D215A Jun 25 2015 10:23AM;dlb223;6/23/2015
008FC1D1-D6A6-4E48-A69F-168DBF8D215A Jun 25 2015 10:23AM;dlb223;6/5 dlb 1Z4370490304215937 to be dlv'd today
008FC1D1-D6A6-4E48-A69F-168DBF8D215A Jun 25 2015 10:24AM;dlb223;6/25 dlb 1Z4370490304216445 to be dlv'd today
00910B84-486C-4AD4-9B1E-5F8D8B42C841 5/12 jad IN TRANSIT; EXPECTED DELIVERY 5/12 PER UPS 1Z750WA20313280446
00910B84-486C-4AD4-9B1E-5F8D8B42C841 4/29 jad IN TRANSIT; EXPECTED DELIVERY 4/29 PER UPS 1Z39ER600354244542
结果我希望是这样的:(再次,我不知道如何使这样的表)
WorkOrderID Comments
00559FB6-4DD2-4762-8DE1-8D1B13962AED 5/17 caj in transit; expected delivery on 5/18 per ups 1Z25AR580319345668; 5/18 caj updated esd on 6/17 per vendor site; 5/17 caj allocated to ship; 5/17 caj updated esd on 5/27 per vendor site; 5/18 caj processed; no udpated delivery date per estes Tracking #/BOL #: 3SNS31780960; 5/18 caj processed; no updated delivery date per ups 1Z39ER600354622348
008FC1D1-D6A6-4E48-A69F-168DBF8D215A Jun 25 2015 10:22AM;dlb223;6/25 dlb 1Z4370490304215160 to be dlv'd today; Jun 8 2015 1:11PM;klh323;6/8 klh Reserved to meet 06/30 requested delivery date; Jun 25 2015 10:23AM;dlb223;6/23/2015; Jun 25 2015 10:23AM;dlb223;6/5 dlb 1Z4370490304215937 to be dlv'd today; Jun 25 2015 10:24AM;dlb223;6/25 dlb 1Z4370490304216445 to be dlv'd today
00910B84-486C-4AD4-9B1E-5F8D8B42C841 5/12 jad IN TRANSIT; EXPECTED DELIVERY 5/12 PER UPS 1Z750WA20313280446; 4/29 jad IN TRANSIT; EXPECTED DELIVERY 4/29 PER UPS 1Z39ER600354244542
我希望,这使我更清楚试图完成。
要使整个查询连接到XML文档中,外部查询还必须具有FOR XML子句。你已经正确地把类型参数放在内部查询中。如果你想在XML中嵌入XML,这是必需的。如果您的查询按其写入方式工作,则只需在其末尾添加一个FOR XML子句即可。 – quest4truth
这并不像我期望的那样工作。对于只有1个'WOId',它将所有内容放在一行中,但是如果我删除了这个约束并将其打开以提取所有工作订单,它会将所有工单的所有注释放入同一行。每个工单都需要一个单独的行。这就是为什么我选择了'wo.WOId'。 – Mike
我想我不应该理解你想要的结果。你能告诉我一些示例数据和理想结果吗? – quest4truth