2013-11-23 5 views
2

Я пытаюсь вычислить среднее число вредителей в городе, которые используют один и тот же Разнообразие культур ..Sql Вычисление среднего

DistrictName | TownName   | CropName |Pests 
Rawalpindi  | pindi    | CIM 506  | 3.3  
Rawalpindi  | pindi    | CIM 506  | 3.8  
Rawalpindi  | Muree    | CIM 506  | 3.5 

Но этот запрос продолжает давать мне синтаксическую ошибку, т.е. недопустимое имя столбца PestPopulation1 где, как я тщательно проверил написание моего имени столбца ... PestPopuplation имеет varchar(max) типа

После мой запрос

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.PestPopulation1) 
FROM (
    SELECT DistrictName, TownName,VarietyOfCrop, cast(PestPopulation1 as float) as Pests 
    FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 

ответ

4

Как уже упоминалось, проблема в том, что вы ссылаетесь на столбец, который недоступен в этой области.

В целом нет оснований для использования такого надуманного запроса. Это должно работать так же хорошо, и более читаемым:

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(cast(T.Pests as float)) 
FROM FinalTable2 T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 
+0

Ошибка преобразования типа данных nvarchar в float. это даст мне эту ошибку ... мой столбец Pest в varchar max – user1056466

0

попробовать это

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.PestPopulation1) 
FROM (
    SELECT DistrictName, TownName,VarietyOfCrop, cast(Pests as float) as PestPopulation1 
    FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 
4

Причина это дает вам ошибку, потому что вы дали выражение cast(PestPopulation1 as float) псевдоним Pests.

Вы должны использовать этот псевдоним в вашем внешнем запросе, например:

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.Pests) 
FROM (
    SELECT DistrictName, TownName,VarietyOfCrop, cast(PestPopulation1 as float) as Pests 
    FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 

Вы должны быть в состоянии упростить этот запрос, нажав cast в avg, как это:

SELECT 
    DistrictName 
, TownName 
, VarietyOfCrop 
, avg(convert(float, PestPopulation1)) as avg_pests 
FROM FinalTable2 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 

Ошибка преобразования данных типа nvarchar в float. Мой PestPopulation1 столбец в varchar(max).

Вам необходимо использовать CONVERT вместо CAST (см. Выше).

+0

Ошибка преобразования типа данных nvarchar в float. это даст мне эту ошибку ... мой столбец Pest в varchar max - – user1056466

+0

@ user1056466 Затем используйте 'convert' вместо' cast'. – dasblinkenlight

+0

Ошибка не изменилась:/ – user1056466

0

Почему не только (с CONVERT вместо CAST):

SELECT DistrictName, TownName,VarietyOfCrop, AVG(CONVERT(float, PestPopulation1)) as Pests 
FROM FinalTable2 
GROUP BY DistrictName, TownName,VarietyOfCrop 

ошибка в запросе, что вы ссылаетесь на столбец, таблица T не имеет. Полученная таблица T имеет столбцы AreaName, TownName, VarietyOfCrop и вредителей, и вы ссылаетесь на столбец PestPopulation1, который там не существует.

+0

Ошибка преобразования типа данных nvarchar в float. это дает мне эту ошибку ...мой столбец Pest в varchar max - – user1056466

+0

@ user1056466 Попробуйте это, с CONVERT вместо CAST – eKek0

+0

По-прежнему та же ошибка:/ – user1056466

0

Вы используете неправильное имя столбца, псевдоним для PestPopulation1 является Вредители в вашем подзапрос, пожалуйста, найти исправленный запрос:

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.Pests) 
FROM ( 
SELECT DistrictName, TownName,VarietyOfCrop, cast(PestPopulation1 as float) as Pests 
FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 
Смежные вопросы