0

使用 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 路径功能但无济于事(我没有尝试过 pivot,因为有大量代码列表)。

我正在尝试获取以下内容

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
4

2 回答 2

1

您需要在您的选择中执行子查询,以便将多行中的值连接到单行中。

请参阅此答案以获取解决方案:https ://stackoverflow.com/a/545672/745511

于 2012-11-01T13:18:27.307 回答
0

我通过创建一个仅将 prt_cd 与事件相关联的视图解决了这个问题,然后创建了另一个基于该视图的视图,该视图结合(连接)了一个事件的所有 prt_cd ......不知道为什么,但从未能够找到方法是一键查询。

于 2012-11-23T18:39:02.933 回答