Re(4): MSSQL Frage
Geizhals » Forum » Programmierung » MSSQL Frage (18 Beiträge, 201 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.  Re: MSSQL Frage  (-Transformer2K- am 14.04.2010, 13:50:10)
..  Re(2): MSSQL Frage  (blitzfreak am 14.04.2010, 14:08:34)
...  Re(3): MSSQL Frage  (-Transformer2K- am 14.04.2010, 15:04:56)
..  Re(2): MSSQL Frage  (blitzfreak am 14.04.2010, 14:54:41)
...  Re(3): MSSQL Frage  (-Transformer2K- am 14.04.2010, 15:04:03)
....
Re(4): MSSQL Frage
15.04.2010, 17:33:30
danke... habe ich im endeffekt eh bereits gestern so gelöst :)

im endeffekt ist die abfrage beruhend auf 6 Views (für die Datumbereiche) fertig und sieht folgendermaßen aus:

SELECT T0.ItemCode, T0.ItemName, T2.ItmsGrpNam, T1.OnHand, T0.AvgPrice*T1.OnHand AS [Artikelkosten],
CASE WHEN t20.summ0 > T1.OnHand THEN T1.OnHand
ELSE t20.summ0 END AS [0-30],
CASE WHEN coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) > 0 THEN T1.OnHand - coalesce(t20.summ0,0)
WHEN coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) <= 0 THEN NULL
WHEN coalesce(t21.summ1,0)+coalesce(t20.summ0,0) <= T1.OnHand THEN t21.summ1
ELSE '9999' END AS [30-60],
CASE WHEN coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) > 0 THEN T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0)
WHEN coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) <= 0 THEN NULL
WHEN coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) <= T1.OnHand THEN t22.summ2
ELSE '9999' END AS [60-90],
CASE WHEN coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) > 0 THEN T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0)
WHEN coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) <= 0 THEN NULL
WHEN coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) <= T1.OnHand THEN t23.summ3
ELSE '9999' END AS [90-120],
CASE WHEN coalesce(t24.summ4,0)+coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) - coalesce(t23.summ3,0) > 0 THEN T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) - coalesce(t23.summ3,0)
WHEN coalesce(t24.summ4,0)+coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) - coalesce(t23.summ3,0) <= 0 THEN NULL
WHEN coalesce(t24.summ4,0)+coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) <= T1.OnHand THEN t24.summ4
ELSE '9999' END AS [120-180],
CASE WHEN coalesce(t25.summ5,0)+coalesce(t24.summ4,0)+coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) - coalesce(t23.summ3,0) - coalesce(t24.summ4,0) > 0 THEN T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) - coalesce(t23.summ3,0) - coalesce(t24.summ4,0)
WHEN coalesce(t25.summ5,0)+coalesce(t24.summ4,0)+coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) > T1.OnHand AND T1.OnHand - coalesce(t20.summ0,0) - coalesce(t21.summ1,0) - coalesce(t22.summ2,0) - coalesce(t23.summ3,0) - coalesce(t24.summ4,0) <= 0 THEN NULL
WHEN coalesce(t25.summ5,0)+coalesce(t24.summ4,0)+coalesce(t23.summ3,0)+coalesce(t22.summ2,0)+coalesce(t21.summ1,0)+coalesce(t20.summ0,0) <= T1.OnHand THEN t25.summ5
ELSE '9999' END AS [> 180]
FROM OITM T0
INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OITB T2 ON T0.ItmsGrpCod = T2.ItmsGrpCod
left join eingang0to30 t20 on t0.itemcode = t20.itemcode
left join eingang30to60 t21 on t0.itemcode = t21.itemcode
left join eingang60to90 t22 on t0.itemcode = t22.itemcode
left join eingang90to120 t23 on t0.itemcode = t23.itemcode
left join eingang120to180 t24 on t0.itemcode = t24.itemcode
left join eingang180andup t25 on t0.itemcode = t25.itemcode
WHERE T1.OnHand > 0 ORDER BY T1.ItemCode ASC

hätt mir zwar gerne die caolesce immer erspart, aber ich habe einfach keine bessere Variante gefunden (da die views ja auch NULLs zurückliefern aber die Addition bzw. Subtraktion trotzdem funktionieren soll).

egal... das Endergebnis zählt :) und trotz der 6 Views über ziemlich große Datensätze ist das Teil noch performant :)

danke nochmals für deine Tipps.


x-x-o
o-x-o
o-o-x ... and the winner is x
15.04.2010, 17:35 Uhr - Editiert von blitzfreak, alte Version: hier
Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
.....  Re(5): MSSQL Frage  (-Transformer2K- am 15.04.2010, 17:38:41)
......  Re(6): MSSQL Frage  (blitzfreak am 15.04.2010, 17:46:27)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung