2012-07-02 54 views
-1

我試圖將一些數據從表中的Vendor列轉出,爲我的每個供應商創建新列。理想情況下,我會爲每個ContractDate分配1行,然後是2個值。但是,我最後得到了2行不同的ContractDate使用SQL語句彙總行時出現問題

我相信我可能需要某種臨時表查詢來做到這一點...我不確定。

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

滴在供應商結果消息8120。 Level 16,State 1,Line 5 列'weather.forecast.Vendor'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – bmcbee

+0

對不起 - 沒有看到表結構,並瞭解什麼被提取,很難看到會發生什麼。新的解決方案應該可以工作 - 但由於我沒有表格結構,您可能需要對其進行編輯以確保它是正確的。 –

+0

我仍然收到相同的錯誤(這次在子選擇中)添加到組中。當我添加它們(Group by ContractDtae,Vendor)時,它做同樣的事情。 – bmcbee