【发布时间】:2015-01-09 18:47:30
【问题描述】:
我有一个非常基本格式的 TSQL 查询:
我这个查询的目标是找到L.localeID = x 所在的所有数据。正如您在查询的第二个内部选择语句中看到的那样。
我在内部选择中有它,因为该表中有多个结果链接到父表。
如何才能以正确的格式获取此查询?我需要以特定方式加入表格还是子查询可以工作?
SELECT A.[trainingEventID],
A.[teTitle],
A.[teDesc],
A.[teSource],
A.[teType],
A.[teMedium],
A.[teFlag],
A.[teCreator],
A.[teCreated],
seg.[segmentDate],
convert(decimal(10, 2), seg.[nonProdHrs]) as nonProdHrs,
(
SELECT emp.[FirstName] as trainerFirst,
emp.[LastName] as trainerLast
FROM BS_Training_Trainers as trn
LEFT OUTER JOIN employeeTable as emp
ON trn.trainerEmpID = emp.EmpID
WHERE trn.segmentID = seg.teSegmentID
FOR XML PATH ('trainer'), TYPE, ELEMENTS, ROOT ('trainers')
),
(
SELECT L.[recordID],
L.[segmentID],
L.[localeID],
L.[teammateCount],
L.[leaderCount]
FROM dbo.BS_TrainingEvent_SegmentDetails AS L
WHERE seg.teSegmentID = L.segmentID
FOR XML PATH ('detail'), TYPE, ELEMENTS, ROOT ('details')
)
FROM [red].[dbo].[BS_TrainingEvents] AS A
INNER JOIN dbo.BS_TrainingEvent_Segments AS seg
ON A.[trainingEventID] = seg.[trainingEventID]
更新
这是一个 SQL Fiddle:http://sqlfiddle.com/#!6/fe3cf/11
【问题讨论】:
-
那么上面的行不通?由于拉回 L.[LocaleID] 的子查询已经包含并加入到 A. 你可以只做 where Seg.LocaleID = X?
-
我没有查询
segtable;我正在查看内部选择L. -
很抱歉。我看错了。我将从 Select 中获取子查询并将其作为连接放置,然后在其中的选择位置 L.* 中选择 L 中的所有值,然后您可以对其应用条件。或者,您可以将所有内容包装到子查询
SELECT * FROM ([WHOLEQUERY]) a Where a.record_ID = x -
我认为我在加入时会遇到的问题是无法使用
FOR XML。我需要显示事件的能力,然后显示它的所有片段,这就是为什么我将它作为内部选择只是不确定如何通过该内部数据进行查询。
标签: sql sql-server tsql stored-procedures