2012-07-02 8 views
-1

Я пытаюсь открутить некоторые данные из столбца Vendor в этой таблице, создавая новые столбцы для каждого из моих поставщиков. В идеале у меня было бы 1 строка для каждого ContractDate, а затем 2 значения. Тем не менее, я заканчиваю 2 рядами отличного ContractDate.Неисправность Агрегация строк с SQL-заявлением

Я считаю, что мне может понадобиться какой-то запрос таблицы temp, чтобы сделать это ... я не уверен, хотя.

SELECT [ContractDate], 
     CASE WHEN Vendor = 'AirDat' 
      THEN (sum(wf.Temppop)/sum(wf.Population)) END as 'AirDat', 
     CASE WHEN Vendor = 'CWG' 
      THEN (sum(wf.Temppop)/sum(wf.Population)) END as 'CWG' 
FROM [ECPDB].[dbo].[weather.forecast] as wf 
INNER JOIN ecpdb.[lookup].[newWeatherStation] as ws 
ON wf.[Station_ID] = ws.[Station ID] 
INNER JOIN ecpdb.[lookup].[CountyNew] as c 
ON ws.[County FIPS] = c.[County FIPS] 
WHERE tradedate = '7/2/2012' 
AND [BENTEK Cell] = 'Northeast' 
GROUP BY [ContractDate], vendor 
+0

Какую платформу базы данных и версию вы используете? –

+1

Какова структура вашей таблицы ... –

+0

Действительно ли 'tradeDate' хранится в виде строки (и отформатирован таким образом), или это просто результат того, как вы написали запрос? Скорее всего, лучше переносить значения ввода строки (если они не являются датами) в функции преобразования даты, так что фактический столбец данных не будет преобразован в строку (потенциально для каждой строки). –

ответ

1

Вы можете сделать это, используя подзапрос;

Select ContractDate, 
    max(case when Vendor = 'AirDat' THEN Vendor_Average End) as AirDAT, 
    max(case when Vendor = 'CWG' THEN Vendor_Average End) as CWG 
    from (
    SELECT [ContractDate] , Vendor, (sum(wf.Temppop)/sum(wf.Population)) as Vendor_Average 
    FROM [ECPDB].[dbo].[weather.forecast] as wf 
    inner join ecpdb.[lookup].[newWeatherStation] as ws 
    on wf.[Station_ID] = ws.[Station ID] 
    inner join ecpdb.[lookup].[CountyNew] as c 
    on ws.[County FIPS] = c.[County FIPS] 
    where tradedate = '7/2/2012' and [BENTEK Cell] = 'Northeast' 
group by ContractDate, Vendor 
) as Subquery 
    group by Contractdate 

Таким образом, пробеги запроса и находит необходимые значения, а затем выбрать строки, которые вы хотите без необходимости группы.

+0

сбросив результаты поставщика в Msg 8120,. Уровень 16, состояние 1, строка 5 Столбец «weather.forecast.Vendor» недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – bmcbee

+0

Извините, что - не видя структуру таблицы и не понимая, что происходит, сложнее увидеть, что произойдет. Новое решение должно работать, но поскольку у меня нет структуры таблицы, вам может потребоваться отредактировать ее, чтобы убедиться, что она правильная. –

+0

Я все еще получаю ту же ошибку (на этот раз в подвыборке), чтобы добавить ее в группу. когда я их добавляю (Group by ContractDtae, Vendor), он делает то же самое. – bmcbee

Смежные вопросы