【问题标题】:Join Table1 with Table2 using Table1 column values in Table2's conditionals使用 Table2 条件中的 Table1 列值将 Table1 与 Table2 连接起来
【发布时间】:2011-09-14 19:44:24
【问题描述】:

我有以下选择语句...

SELECT ROW_NUMBER() OVER(order by cola) as [id], cola
  FROM Table1

这构成了我想要作为@var 插入的所有值的表,现在它可以工作,但我每次都必须指定@var...

 SELECT @var AS [Cola], (

            SELECT COUNT(*)
              FROM vwTableA AS Z
             WHERE Cola = COALESCE(@var,Cola)
               AND NOT EXISTS (

                        SELECT * 
                          FROM TableB
                         WHERE Colb = Z.Colb

                              )

  ) AS [NewCol1],
  (

            SELECT COUNT(*)
              FROM vwTableB AS Y
             INNER JOIN TableC AS C
                ON Y.Colc = C.Colc
             WHERE Y.Cola = @var

  ) AS [NewCol2],
  (

            SELECT COUNT(*)
              FROM vwTableC AS X
             INNER JOIN TableD AS D
                ON X.Colc = D.Colc
             WHERE X.Cola = @var

  ) AS [NewCol3]

所以我想通过我显示的第一个 Select/Table 中的所有“cola”值运行第二个选择,而不是必须指定 @var 并且每次只返回一行。我怎样才能做到这一点?

【问题讨论】:

    标签: sql select join where


    【解决方案1】:

    如果您使用公用表表达式 CTE,您可以使用它来加入您的其他语句

    with var as 
    ( SELECT ROW_NUMBER() OVER(order by cola) as [id], cola
      FROM Table1)
    
    
    SELECT var.id  AS [Cola], (
    
                SELECT COUNT(*)
                  FROM vwTableA AS Z
                 WHERE Cola = COALESCE(var.id,Cola)
                   AND NOT EXISTS (
    
                            SELECT * 
                              FROM TableB
                             WHERE Colb = Z.Colb
    
                                  )
    
      ) AS [NewCol1],
      (
    
                SELECT COUNT(*)
                  FROM vwTableB AS Y
                 INNER JOIN TableC AS C
                    ON Y.Colc = C.Colc
                 WHERE Y.Cola = var.id
    
      ) AS [NewCol2],
      (
    
                SELECT COUNT(*)
                  FROM vwTableC AS X
                 INNER JOIN TableD AS D
                    ON X.Colc = D.Colc
                 WHERE X.Cola = var.id
    
      ) AS [NewCol3]
    FROM var
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2011-03-29
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      相关资源
      最近更新 更多