0

我有一个查询 - 它与 Union 语句将 5 列合并为 2 列。所以基本上 - 一个ID +一些信息。由于 ID 可能在第 2-5 列中 - 多次...我重新排列为一个 ID 列中的所有内容 + 文本。

现在 - 我想使用第二个“with”语句 - 将几行的 ID 与 XML 路径结合起来。但在这里我卡住了。

这就是代码 - 它给了我两列 - 内容符合预期:

    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

0

用逗号分隔 CTE;唯一WITH需要指定一次:

;WITH CTE1 AS (
    ...
), CTE2 AS (
    ...
)
SELECT ...
于 2014-02-21T20:34:01.630 回答
0

你还记得在第一个语句的末尾加一个分号吗?

于 2014-02-21T20:34:03.310 回答