2014-09-04 45 views
1

我使用MS SQL Server 2012的加入從一個SQL結果數據集合

我有以下查詢

Select HedgeDate, CompanyName, HedgeValue 
FROM GasHedges 
LEFT OUTER JOIN GasCompanies ON GasHedges.CompanyID = GasCompanies.ID 
WHERE HedgeDate BETWEEN '2014-09-01' AND '2014-09-05' 

返回

SQL Table

我想要顯示它採用以下格式。

required result

我都早上這方面的工作,並沒有真正到達那裏。我不想在SQL代碼中指定companyName,因爲更多公司可能會添加到表中。我一直在嘗試連接的不同變體,但沒有得到任何地方。我也在看工會,但似乎無法得到它。

任何幫助非常感謝。

+0

你應該LD看看樞軸 – 2014-09-04 09:43:13

回答

2
SELECT HedgeDate, CompanyName, HedgeValue 
FROM GasHedges 
LEFT OUTER JOIN GasCompanies ON GasHedges.CompanyID = GasCompanies.ID 
PIVOT (count(HedgeValue) FOR CompanyName in ([RWET], [JPMorgan], [Statoil])) 
WHERE HedgeDate BETWEEN '2014-09-01' AND '2014-09-05' 

在這裏你去

編輯1,

如果您想要列表是動態

,請參閱HERE 嘗試自己做,以確保你瞭解它

+0

不起作用,只是在where子句中得到一個錯誤。加上我不能在查詢中指定公司名稱 – Silentbob 2014-09-04 09:51:15

1

感謝ah_hau,在你的指導下,我得到了以下代碼工作

DECLARE @StartDate date 
DECLARE @EndDate date 
DECLARE @cols nvarchar(2000) 
DECLARE @query nvarchar(3000) 

select @cols = coalesce(@cols + ',[' + companyName + ']', '[' + companyName + ']') 
from GasCompanies 
set @query = 'select * 
from 
(Select HedgeDate, CompanyName, HedgeValue 
FROM GasHedges 
LEFT OUTER JOIN GasCompanies ON GasHedges.CompanyID = GasCompanies.ID 
WHERE HedgeDate BETWEEN DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AND dateadd(month,1+datediff(month,0,getdate()),-1)) as s 
PIVOT 
(
count(HedgeValue) FOR CompanyName in ('[email protected] +') 

) as t' 

execute(@query)