0

重複の可能性:
複数の行を多対多で 1 つの行に結合する

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

私は次のものを取得しようとしています

SQL の結果

Cus_ID     Prt_Cd     Cus_Vis_ID
1           1A,2A        1

私が最終的に何をするかは

SQL の結果

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) を取得します。

ここに私が持っているものがあります

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

2

それについて多くの質問があることに同意します。あなたはただ書く必要がありますfor xml

select
    V.Cus_ID,
    V.Cus_Vis_ID,
    stuff(
      (
        select ', ' + TP.Prt_Cd
        from CUS_EVENT as TE
            inner join CUS_XREF as TX on TX.Cus_Event_ID = TE.Cus_Event_ID and TX.Cus_ID = TE.Cus_ID
            inner join CUS_PRT as TP on TP.Cus_Prt_ID = TX.Cus_Prt_ID and TP.Cus_ID = TE.Cus_ID
        where
            TE.Cus_Vis_ID = V.Cus_Vis_ID and
            TE.Cus_ID = V.Cus_ID
        for xml path(''), type
      ).value('.', 'nvarchar(max)')
      , 1, 2, '')
from CUS_VISIT as V

SQL フィドル

于 2012-11-06T13:51:10.113 に答える
0

これを試してください...しかし、私はこのクエリを実行していません。同じシーンを実装しました。試してみて、私に知らせてください

SELECT  
      CUS.Cus_ID
    , CUS.Cus_Vis_ID
    , Prt_Cd=STUFF(
                       (SELECT
                            ', ' + S.Prt_Cd
                            FROM CUS_PRT s
                            INNER JOIN CUS_XREF XREF ON  CUS.cus_id=XREF.cus_id AND s.cus_id=XREF.cus_id AND XREF.Cus_Prt_ID = s.Cus_Prt_ID
                            FOR XML PATH(''), TYPE
                       ).value('.','varchar(max)')
                       ,1,2, ''
                  )   

    FROM CUS_EVENT CUS 
    GROUP BY CUS.Cus_ID,CUS.Cus_Vis_ID
于 2012-11-06T13:56:40.807 に答える