Соедините Table1 с Table2, используя значения столбца Table1 в условных выражениях Table2 - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть следующий оператор выбора ...

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]

Итак, я хочу запустить этот второй выбор по всем значениям "cola" из первой таблицы выбора / выбора, которую я показал, вместо того, чтобы указывать @var, и он возвращает только одну строку каждый раз. Как я могу это сделать?

1 Ответ

2 голосов
/ 15 сентября 2011

Если вы используете CTE Common Table Expression, вы можете использовать его для присоединения к вашему другому выражению

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
...