显示存储过程

时间:2013-01-25 13:07:35

标签: sql stored-procedures

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

  

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

1 个答案:

答案 0 :(得分: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 ФИРМА.НаимПредпр