Pivot dreier Spalten

kraeppy

Benutzer
Beiträge
11
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
 
Werbung:
Wenn mich nicht alles täuscht geht es aber nicht anders, auch nicht mit PIVOT. Wenn ich dich richtig verstehe willst du ja unterschiedliche Werte (VolumePower, CDS, VolumeCoal) in die selben Spalten bringen ob wohl sie eigentlich nichts mit einander zu tun haben, theoretisch nicht mal das selbe Format haben. Das kann man sich nur noch mit gebastel zurecht biegen.
 
Zurück
Oben