Guten Morgen,
ich habe eine Tabelle folgender Struktur:
[SpecificationId], [DeliveryTime_Hourly], [VolumePower], [CDS], [VolumeCoal].
Zu gewissen Produkten werden Kalkulationen durchgeführt und für einen Tag liegen dann entsprechend 23-25 Werte vor (Zeitumstellung).
Ich brauche allerdings folgende Struktur.
[SpecificationId], [DeliveryDate], [Type], [val_1], ..., [val_25]. Wobei in Type dann VolumePower/CDS/VolumeCoal stehen soll.
Für eine Spalte habe ich es hinbekommen:
SELECT
ResultsSetId
,SpecificationId
,deliverydate
,[1] as val_1, ..., [25] as val_25
FROM
(
select
ResultsSetId
,Product
,RowNumber + case when RowNumber > 2 and HoursOfDay = 23 then 2 when RowNumber > 3 and HoursOfDay = 24 then 1 else 0 end as RowNumber
,HoursOfDay
,VolumePower
,deliverydate
from (
select
pd.ResultsSetId
,SpecificationId
--,map.ZemdaProductID
,ROW_NUMBER() OVER (PARTITION BY pd.ResultsSetId
,SpecificationId
,maxDisp.DateDeliveryTime
order by pd.deliverytime,pd.ResultsSetId
) as RowNumber
,COUNT(*) over (PARTITION BY pd.ResultsSetId
,specificationid,
maxdisp.datedeliverytime
order by pd.ResultsSetId) as HoursOfDay
,VolumePower
,deliverydate = CAST(deliverytime as date)
-- pd.*
--,maxDisp.*
from @tblInstruments i
inner join EOD.PricingResults.PricingResults_Dispatch pd on i.InstrumentName = pd.SpecificationId
inner join (
select
COUNT(DeliveryTime) as NumberOfHours,CAST(DeliveryTime as date) as DateDeliveryTime,SpecificationId as MaxSpecificationId,ResultsSetId
from
EOD.PricingResults.PricingResults_Dispatch
where ResultsSetId = 398
group by
CAST(deliverytime as date),SpecificationId,ResultsSetId
) maxDisp on (pd.SpecificationId = maxDisp.MaxSpecificationId and CAST(pd.deliverytime as date) = maxDisp.DateDeliveryTime and pd.ResultsSetId = maxDisp.ResultsSetId)
) q1
) as sourceTable
PIVOT
(
AVG(volumepower)
--FOR h in
FOR RowNumber in
(
[1],[2],..., [25]
)
) AS PivotTable
ORDER BY ResultsSetId,SpecificationId,deliverydate
Die RowNumber und HoursOfDay brauche ich, um festzustellen, ob eine Zeitumstellung an dem Tag erfolgte. Von W->S fehlt natürlich die 3. Stunde, von S->W ist die dritte Stunde doppelt.
Die Spalten CDS, VolumeCoal brauche ich ebenfalls horizontal, aber weiß nicht, wie ich das in obige Abfrage mit einbringen kann. Dafür habe ich zu wenig mit PIVOT gearbeitet.
Die einfachste Lösung wäre die Abfrage 3x auszuführen (für VolumePower, CDS und VolumeCoal) und die Ergebnisse mittels UNION ALL zufammenzuführen.
Aber diesen Ansatz möchte ich ungern verfolgen.
Danke im Voraus
LG
kraeppy
ich habe eine Tabelle folgender Struktur:
[SpecificationId], [DeliveryTime_Hourly], [VolumePower], [CDS], [VolumeCoal].
Zu gewissen Produkten werden Kalkulationen durchgeführt und für einen Tag liegen dann entsprechend 23-25 Werte vor (Zeitumstellung).
Ich brauche allerdings folgende Struktur.
[SpecificationId], [DeliveryDate], [Type], [val_1], ..., [val_25]. Wobei in Type dann VolumePower/CDS/VolumeCoal stehen soll.
Für eine Spalte habe ich es hinbekommen:
SELECT
ResultsSetId
,SpecificationId
,deliverydate
,[1] as val_1, ..., [25] as val_25
FROM
(
select
ResultsSetId
,Product
,RowNumber + case when RowNumber > 2 and HoursOfDay = 23 then 2 when RowNumber > 3 and HoursOfDay = 24 then 1 else 0 end as RowNumber
,HoursOfDay
,VolumePower
,deliverydate
from (
select
pd.ResultsSetId
,SpecificationId
--,map.ZemdaProductID
,ROW_NUMBER() OVER (PARTITION BY pd.ResultsSetId
,SpecificationId
,maxDisp.DateDeliveryTime
order by pd.deliverytime,pd.ResultsSetId
) as RowNumber
,COUNT(*) over (PARTITION BY pd.ResultsSetId
,specificationid,
maxdisp.datedeliverytime
order by pd.ResultsSetId) as HoursOfDay
,VolumePower
,deliverydate = CAST(deliverytime as date)
-- pd.*
--,maxDisp.*
from @tblInstruments i
inner join EOD.PricingResults.PricingResults_Dispatch pd on i.InstrumentName = pd.SpecificationId
inner join (
select
COUNT(DeliveryTime) as NumberOfHours,CAST(DeliveryTime as date) as DateDeliveryTime,SpecificationId as MaxSpecificationId,ResultsSetId
from
EOD.PricingResults.PricingResults_Dispatch
where ResultsSetId = 398
group by
CAST(deliverytime as date),SpecificationId,ResultsSetId
) maxDisp on (pd.SpecificationId = maxDisp.MaxSpecificationId and CAST(pd.deliverytime as date) = maxDisp.DateDeliveryTime and pd.ResultsSetId = maxDisp.ResultsSetId)
) q1
) as sourceTable
PIVOT
(
AVG(volumepower)
--FOR h in
FOR RowNumber in
(
[1],[2],..., [25]
)
) AS PivotTable
ORDER BY ResultsSetId,SpecificationId,deliverydate
Die RowNumber und HoursOfDay brauche ich, um festzustellen, ob eine Zeitumstellung an dem Tag erfolgte. Von W->S fehlt natürlich die 3. Stunde, von S->W ist die dritte Stunde doppelt.
Die Spalten CDS, VolumeCoal brauche ich ebenfalls horizontal, aber weiß nicht, wie ich das in obige Abfrage mit einbringen kann. Dafür habe ich zu wenig mit PIVOT gearbeitet.
Die einfachste Lösung wäre die Abfrage 3x auszuführen (für VolumePower, CDS und VolumeCoal) und die Ergebnisse mittels UNION ALL zufammenzuführen.
Aber diesen Ansatz möchte ich ungern verfolgen.
Danke im Voraus
LG
kraeppy