2

ストアドプロシージャに問題があります。実行すると、次のエラーが発生します。

ADO EROR:キーワード「where」の近くの構文が正しくありません

2012年までにその地域を選択した企業がある場合に、ファイルにカウントされた2つのファイルを表示したい

これは私の質問です:

    ALTER PROCEDURE ProceduraCalculareAuto
      AS
       SELECT ФИРМА.НаимПредпр
         FROM  dbo.ФИРМА  LEFT OUTER JOIN
                  dbo.АВТОМОБ ON dbo.АВТОМОБ.КодПредпр = dbo.ФИРМА.КодПредпр INNER JOIN
                      dbo.КАРНЕТ ON dbo.КАРНЕТ.КодПредпр = dbo.ФИРМА.КодПредпр 
                  INNER JOIN
    (SELECT Tegaci = COUNT
            (CASE [КодПриц/Тягач]
                  WHEN 4 THEN  [КодПриц/Тягач] 
                END),
            Auto = COUNT
         (CASE [КодПриц/Тягач]
          WHEN 3 THEN  [КодПриц/Тягач] 
                         END)
          FROM     dbo.АВТОМОБ
                 GROUP BY dbo.АВТОМОБ.[КодПриц/Тягач] )
      WHERE(dbo.КАРНЕТ.ДтВыдачи BETWEEN CONVERT(DATETIME, '2012-01-01 00:00:00',  
       102) AND CONVERT(DATETIME, '2012-12-31 00:00:00', 102))
      GROUP BY ФИРМА.НаимПредпр

 RETURN
4

1 に答える 1

7

サブクエリのエイリアスがありません。SQL Serverでは、すべての派生テーブルとサブクエリにエイリアスが必要です。ONサブクエリを残りのクエリに結合する句もありません。

SELECT ФИРМА.НаимПредпр
FROM  dbo.ФИРМА  
LEFT OUTER JOIN dbo.АВТОМОБ 
  ON dbo.АВТОМОБ.КодПредпр = dbo.ФИРМА.КодПредпр 
INNER JOIN dbo.КАРНЕТ 
  ON dbo.КАРНЕТ.КодПредпр = dbo.ФИРМА.КодПредпр 
INNER JOIN
(
  SELECT Tegaci = COUNT
            (CASE [КодПриц/Тягач]
                  WHEN 4 THEN  [КодПриц/Тягач] 
                END),
            Auto = COUNT
         (CASE [КодПриц/Тягач]
          WHEN 3 THEN  [КодПриц/Тягач] 
                         END)
  FROM     dbo.АВТОМОБ
  GROUP BY dbo.АВТОМОБ.[КодПриц/Тягач] 
)  src 
   -- this needs an alias and it also needs a join condition. 
  on etc = src.
WHERE(dbo.КАРНЕТ.ДтВыдачи BETWEEN CONVERT(DATETIME, '2012-01-01 00:00:00',  
       102) AND CONVERT(DATETIME, '2012-12-31 00:00:00', 102))
GROUP BY ФИРМА.НаимПредпр

私は結合列を推測していますが、これが必要かもしれないと思います:

SELECT ФИРМА.НаимПредпр
FROM  dbo.ФИРМА  
LEFT OUTER JOIN dbo.АВТОМОБ 
  ON dbo.АВТОМОБ.КодПредпр = dbo.ФИРМА.КодПредпр 
INNER JOIN dbo.КАРНЕТ 
  ON dbo.КАРНЕТ.КодПредпр = dbo.ФИРМА.КодПредпр 
INNER JOIN
(
  SELECT Tegaci = COUNT
            (CASE [КодПриц/Тягач]
                  WHEN 4 THEN  [КодПриц/Тягач] 
                END),
            Auto = COUNT
         (CASE [КодПриц/Тягач]
          WHEN 3 THEN  [КодПриц/Тягач] 
                         END),
      dbo.АВТОМОБ.[КодПриц/Тягач]
  FROM     dbo.АВТОМОБ
  GROUP BY dbo.АВТОМОБ.[КодПриц/Тягач] 
)  src 
   -- this needs an alias and it also needs a join condition. 
  on dbo.АВТОМОБ.[КодПриц/Тягач] = src.[КодПриц/Тягач] 
WHERE(dbo.КАРНЕТ.ДтВыдачи BETWEEN CONVERT(DATETIME, '2012-01-01 00:00:00',  
       102) AND CONVERT(DATETIME, '2012-12-31 00:00:00', 102))
GROUP BY ФИРМА.НаимПредпр
于 2013-01-25T13:11:10.230 に答える