Reputation: 109
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
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