Почему CTE в SQL Server выполняет INNER JOIN, если не выполнены никакие условия?

У меня есть стол mse которые имеют все ряды StatusId = 1, Но в таком запросе INNER JOINED VIEW выполняется независимо от значения столбца StatusId, Как это предотвратить?

WITH cte201401291517 AS 
( 
   SELECT
      'QuantityOutPerShift' = SUM([vsqo].[QuantityOutPerShift])
      , [mse].[ShiftGroup]
      , [mse].[Station]
      , [vsqo].[Shift]
   FROM
      [dbo].[mse] AS mse
   INNER JOIN 
      [dbo].[vmsqo] AS vsqo ON [mse].[Station] = [vsqo].[FromStation]
                            AND ( [mse].[ShiftGroup] = [vsqo].[ShiftGroup]
                                  OR [mse].[ShiftGroup] = 'ALL') -- order is important!
   WHERE
      [mse].[StatusId] = 3
   GROUP BY
      [mse].[ShiftGroup]
      , [mse].[Station]
      , [vsqo].[Shift])
UPDATE
  [dbo].[mse]
SET 
  [dbo].[mse].[QuantityOutPerShift] = [cte].[QuantityOutPerShift]
  , [dbo].[mse].[ShiftCurrent] = [cte].[Shift]
  --OUTPUT INSERTED.*
FROM
   cte201401291517 AS cte
WHERE
   [dbo].[mse].[Station] = [cte].[Station]
   AND ( [dbo].[mse].[ShiftGroup] = [cte].[ShiftGroup]
         OR [dbo].[mse].[ShiftGroup] = 'ALL' )  -- order is important!
   AND [dbo].[mse].[StatusId] = 3;

Я не могу сделать это без CTE, потому что я обновляю таблицу с помощью SUM, которую нельзя использовать в UPDATE заявление.

Я использую SQL Server 2005

0 ответов

Другие вопросы по тегам