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パス機能を使用しましたが、役に立ちませんでした(コードの膨大なリストがあるため、ピボットを試していません) )。

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

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,'')

これが私の最新の試みです。編集すると再びリストの一番上に移動することに気づかなかったので、新しい投稿を追加しました...どこかに別のサブクエリが必要だと思いますが、それを他の2つのクエリにどこでどのように結び付けるかわかりません。

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

複数の行の値を1つの行に連結するには、select内でサブクエリを実行する必要があります。

解決策については、この回答を参照してください:https ://stackoverflow.com/a/545672/745511

于 2012-11-01T13:18:27.307 に答える
0

この問題を解決するには、prt_cdをイベントに関連付けるだけのビューを作成し、このビューに基づいて、1つのイベントのすべてのprt_cdを結合(連結)する別のビューを作成します...理由はわかりませんが、行う方法は、1つのクエリですべてを1つのショットで行うことです。

于 2012-11-23T18:39:02.933 に答える