使用SQL Server我有以下表/数据
CUS_VISIT
Cus_ID Cus_Vis_ID
1 01
1 02
2 01
和
CUS_EVENT
Cus_Event_ID Cus_ID Cus_Vis_ID
001 1 01
002 1 01
和
CUS_XREF
Cus_ID Cus_Event_ID Cus_Prt_ID Cus_Seq_No
1 001 1 1
1 001 2 1
和
CUS_PRT
Cus_ID Cus_Prt_ID Prt_Cd
1 1 1A
1 2 2A
我尝试了很多查询,但没有包含它们,因为我认为它会混淆事情......他们中的大多数都使用了xml路径功能但无济于事(我没有尝试过枢轴,因为有大量的代码清单。)
我想获得以下
SQL RESULTS
Cus_ID Prt_Cd Cus_Vis_ID
1 1A,2A 1
我最终得到的是
SQL RESULTS
Cus_ID Prt_Cd Cus_Vis_ID
1 1A 1
1 2A 1
表格由......链接。
CUS_VISIT.Cus_ID = CUS_EVENT.Cus_ID
CUS_VISIT.Cus_Vis_ID = CUS_EVENT.Cus_Vis_ID
CUS_VISIT.Cus_ID = CUS_XREF.Cus_ID
CUS_EVENT.Cus_Event_ID = CUS_XREF.Cus_Event_ID
CUS_XREF.Cus_Prt_ID = CUS_PRT.Cus_Prt_ID
CUS_XREF.Cus_ID = CUS_PRT.Cus_ID
如果放弃CUS_XREF.Cus_Prt_ID = CUS_PRT.Cus_Prt_ID
,我几乎可以得到我想要的东西
加入但我得到了客户的所有零件代码(Prt_Cd
),而不仅仅是那次访问的零件代码。
如果有助于查看我的不成功查询,或者我遗漏了任何遗憾,请告诉我。谢谢你的帮助。
-
这是我的子查询
stuff((
select ',' + B.prt_cd
from CUS_PRT B
WHERE B.prt_cd = XREF.prt_cd -- this is killing me
and XREF.cus_id=B.cus_id and
-- some extra criteria i need but didn't think involved in my issue
B.prt_typ='1'
and B.valid_entry='Y' and B.cur_entry_ind='Y'
for xml path('')),1,1,'')
这是我最近的尝试。我添加了一个新帖子,因为我没有意识到编辑会将其再次移到列表的顶部...我想我需要在某个地方使用另一个子查询但不确定在何处以及如何将其与其他两个查询联系起来。
select distinct CUS_EVENT.cus_id, CUS_EVENT.cus_visit_id,
(Select CUS_PRT.prt_cd + ',' AS [text()]
From CUS_PRT, CUS_XREF
where
CUS_EVENT.cus_id=XREF.cus_id
and CUS_EVENT.cus_event_id = XREF.cus_event_id
and CUS_XREF.cus_id=CUS_PRT.cus_id
and CUS_XREF.cus_prt_id = CUS_PRT.cus_prt_id
and CUS_XREF.prt_seq_no ='1'
order by CUS_PRT.prt_cd
for XML PATH('')) [Codes]
from CUS_EVENT
答案 0 :(得分:1)
您需要在select中执行子查询,以便将多行中的值连接成一行。
有关解决方案,请参阅此答案:https://stackoverflow.com/a/545672/745511
答案 1 :(得分:0)
我通过创建一个视图来解决这个问题,该视图只是将prt_cd与事件相关联,然后另一个基于此视图的视图将一个事件的所有prt_cd组合(连接)...不确定原因但是从未能够找到一种方法就是用一个查询一次性完成。