在同一查询中使用Join,Group By,Having和Where子句

时间:2015-11-26 13:46:21

标签: sql-server-2008

我有两个名为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。

有人可以为此提供帮助吗?

1 个答案:

答案 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