2

我的存储过程有问题,运行时出现此错误:

ADO EROR:关键字“ where”附近的语法不正确

我想显示 2 个按归档计数的归档,其中我有公司在 2012 年之前选择了该区域

这是我的查询:

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