0

私はクエリを持っています.5列を2列にUnionステートメントと組み合わせています。つまり、基本的には ID + 情報です。IDは列2〜5にある可能性があるため、数回... 1つのID列+テキストにすべてが含まれるように再配置しました。

ここで、2 番目の "with" ステートメントを使用して、複数の行の ID を XML パスと結合したいと考えました。しかし、ここで行き詰まりました。

それがコードです-これにより、2つの列が得られます-コンテンツは期待どおりです:

    With
STall as (Select
    'Status: ' + ST.Status + Char(10) + 'Crew Information:' + Char(10) +
    'Instructor: ' + ST.IP + Char(10) + 'Student: ' + ST.SP + Char(10) + Case
      When ST.ACM1 = 'NA' Then '' Else 'ACM1: ' + ST.ACM1 + Char(10) End + Case
      When ST.ACM2 = 'NA' Then '' Else 'ACM2: ' + ST.ACM2 + Char(10)
    End + 'Lesson: ' + ST.Lesson + Char(10) + Case
      When ST.ScheduleRemarks = '' Then ''
      Else ' REM:' + ST.ScheduleRemarks + Char(10)
    End + 'Equipment: ' + ST.EquipmentName + ' (' + ST.Callsign + ')' +
    Char(10) + 'Start: ' + Convert(VARCHAR(10),ST.ScheduleTO,104) + ' - ' +
    Convert(VARCHAR(5),ST.ScheduleTO,108) + ' UTC' + Char(10) + 'End: ' +
    Convert(VARCHAR(10),ST.ScheduleTD,104) + ' - ' +
    Convert(VARCHAR(5),ST.ScheduleTD,108) + ' UTC' + Char(10) + Case
      When ST.ATC = 'NA' Then '' Else ST.ATC End As SInfo,
    ST.IDIP,
    ST.IDSP,
    ST.IDA1,
    ST.IDA2
  From
    (Select
      Case When Schedule.StatusRelease = 1 Then 'OK' Else Case
          When Schedule.StatusRequest = 1 Then 'STBY' Else 'N/A' End
      End As Status,
      Schedule.ContactIDIP,
      Schedule.ContactIDSP,
      MasterLesson.Lesson,
      Equipment.EquipmentName,
      CallSignList.Callsign,
      Schedule.Meeting,
      Schedule.ScheduleRemarks,
      Schedule.StatusRelease,
      Schedule.StatusRequest,
      Schedule.ScheduleDay,
      ContactList.FullNameTLC As IP,
      ContactList1.FullNameTLC As SP,
      Case When Schedule.ContactIDACM1 = 0 Then 'NA'
        Else ContactList2.FullNameTLC End As ACM1,
      Case When Schedule.ContactIDACM2 = 0 Then 'NA'
        Else ContactList3.FullNameTLC End As ACM2,
      Schedule.ScheduleTO,
      Schedule.ScheduleTD,
      Case When Schedule.RouteID = 0 Then 'NA'
        Else 'Route: ' + Airport.ICAO + ' - ' + Case
          When IsNull(Airport1.ICAO, 'NA') = 'NA' Then ' '
          Else Airport1.ICAO + ' - ' End + Airport2.ICAO + Char(10) + Char(13)
      End As ATC,
      ContactList.Id As IDIP,
      ContactList1.Id As IDSP,
      ContactList2.Id As IDA1,
      ContactList3.Id As IDA2
    From
      Schedule Inner Join
      StudentLesson On Schedule.ScheduleLessonID = StudentLesson.StudentLessonID
      Inner Join
      MasterLesson On StudentLesson.LessonID = MasterLesson.ID Inner Join
      Equipment On Schedule.EquipmentID = Equipment.ID Left Join
      CallSignList On CallSignList.ID = Schedule.CallSignListID Left Join
      Route On Route.ID = Schedule.RouteID Inner Join
      ContactList On ContactList.Id = Schedule.ContactIDIP Inner Join
      ContactList ContactList1 On ContactList1.Id = Schedule.ContactIDSP
      Left Join
      ContactList ContactList2 On Schedule.ContactIDACM1 = ContactList2.Id
      Left Join
      ContactList ContactList3 On Schedule.ContactIDACM2 = ContactList3.Id
      Left Join
      Airport On Route.AirportID_Dep = Airport.ID Left Join
      Airport Airport1 On Route.AirportID_Via = Airport1.ID Left Join
      Airport Airport2 On Route.AirportID_Arr = Airport2.ID
    Where
      ((Schedule.StatusRelease = 1) Or
        (Schedule.StatusRequest = 1)) And
      Schedule.ScheduleDay = '21.02.2014') As ST)

Select Distinct
  STall.IDIP,SInfo
From
  STall
where STall.IDIP > 0  

UNION
Select Distinct
  STall.IDSP,SInfo
From
  STall
where STall.IDSP > 0 
UNION
  Select Distinct
  STall.IDA1,SInfo
From
  STall
where STall.IDA1 > 0 
UNION
Select Distinct
  STall.IDA2,SInfo
From
  STall
  where STall.IDA2 > 0 

今-With STtotal as (最初に別のものを追加しようとしました...そして

)
Select Distinct
  STsub.IDIP,
  SubString((Select
     +Char(10) + STn1.SInfo As [text()]
  From
    STsub STn1
  Where
    STn1.IDIP = STtotal.IDIP
  Order By
    STn1.IDIP
  For Xml Path('')), 2, 1000) ScheduleInfo
From
  STtotal

しかし、エラーが発生します-「with」のステートメントが間違っています。

たぶん、別のアプローチがあります - 結合する方法 - 「情報テキスト」列とすべての ID - 列 2-5 にある可能性があります。

ご意見ありがとうございます

4

2 に答える 2