我有两个名为S1和S2的表。我有一个共同的列,即ID。相同的ID可以包含S2中的记录数。现在我想从S2中只检索一条记录以及其他记录。 S2的记录也可以为空。我把这个问题框起来了。
SELECT
[ID], [C], [ST], [AS], [CD], [SS], [SD],
FROM
[dbo].[S1]
WHERE
SD IN (SELECT MAX(SD)
FROM S1 (nolock)
WHERE SID = 45 AND SS != 7
GROUP BY AS)
这只返回S1表中的记录。现在我想与第二个表S2结合使用以获取上述结果中具有ID的记录,并且LogType应为2.它也可以为此记录返回null。
有人可以为此提供帮助吗?
答案 0 :(得分:0)
您可以使用OUTER APPLY
:
;WITH cte
AS ( SELECT [ID] ,
[C] ,
[ST] ,
[AS] ,
[CD] ,
[SS] ,
[SD]
FROM [dbo].[S1]
WHERE SD IN ( SELECT MAX(SD)
FROM S1 (NOLOCK)
WHERE [SID] = 45
AND SS <> 7
GROUP BY [AS] )
)
SELECT *
FROM cte c
OUTER APPLY ( SELECT *
FROM [dbo].[S2]
WHERE ID = c.ID
AND LogType = 2
) oa