Sergio
Sergio

Reputation: 109

display a stored procedure

I have a problem with my stored procedure, when I run I have this error:

ADO EROR: Incorrect syntax near the keyword " where "

I want to display 2 fileds counted by on filed where i have companies that area selected by year 2012

This is my query:

    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

Upvotes: 2

Views: 128

Answers (1)

Taryn
Taryn

Reputation: 247880

You are missing an alias for the subquery. In SQL Server every derived table and subquery needs an alias. You are also missing the ON clause to join the subquery to the rest of your query:

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 ФИРМА.НаимПредпр

I am guessing on the join columns, but I think you might want this:

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 ФИРМА.НаимПредпр

Upvotes: 7

Related Questions