Ich versuche, die verbleibende Anzahl von Arbeitseinheiten für jeden Monat zu erhalten, von einer Summe zwischen einer gekauften Anzahl von Arbeitseinheiten und einer verbrauchten Anzahl von Arbeitseinheiten.Berechnen Schließen (Summen von zwei Ansichten, einschließlich der Vergangenheit)
ich zwei Möglichkeiten ausprobiert, aber beide haben Fehler:
Im ersten Test habe ich eine „Monate“ Tabelle, die jeden Monat und jedes Jahr, um alle Monate in der endgültigen Matrix zu zeigen, enthält wünsche ich mit diesen Daten zu erstellen. Bei dieser Methode erhalte ich die Schließung, wenn eine verbrauchte Arbeitseinheit vorhanden ist, aber wenn nicht, ist die Spalte "leer", weil sie nicht die letzte Schließung erhält.
USE OTRS_Revised
SELECT [Customer], CASE WHEN [Year] < 2016 THEN 1 ELSE [Year] END AS [Year], CASE WHEN [Year] < 2016 THEN 0 ELSE [Month] END AS [Month], [Closing] AS Total, SUM([Closing])
OVER (PARTITION BY [Customer] ORDER BY [Year], [Month] ROWS UNBOUNDED PRECEDING) AS Closing
FROM [dbo].[WU_Closing_View]
WHERE [Customer] IN ('CustomerList')
GROUP BY [Customer], [Year], [Month], [Closing]
UNION ALL
SELECT '' AS Customer, CASE WHEN [Year] < 2016 THEN 1 ELSE [Year] END AS [Year], CASE WHEN [Year] < 2016 THEN 0 ELSE [Month] END AS [Month], '' AS Total, '' AS Sum_bought
FROM [dbo].Months
WHERE [Year] <= 2016
GROUP BY Year, Month
ORDER BY Customer, Year, Month
Ich habe auch versucht, es "Monat für Monat", mit der folgenden Abfrage zu tun. Es funktioniert für einen Monat, aber ich kann keinen Weg finden, dies zu verwenden, um die Ergebnisse für jeden Monat des Jahres 2016.
SELECT
(SELECT SUM(Closing) AS Expr1
FROM OTRS_Revised.dbo.WU_Bought_View
WHERE (Customer LIKE 'SomeCustomer') AND (DATEADD(Year, Year - 1900, DATEADD(Month, Month - 1, DATEADD(day, 0, 0))) <= DATEADD(Year, 2016 - 1900, DATEADD(Month, 5 - 1, DATEADD(day, 0, 0))))
GROUP BY Customer)
+
(SELECT SUM(Closing) AS Expr1
FROM OTRS_Revised.dbo.WU_Consumed_View
WHERE (Customer LIKE 'SomeCustomer') AND (DATEADD(Year, Year - 1900, DATEADD(Month, Month - 1, DATEADD(day, 0, 0))) <= DATEADD(Year, 2016 - 1900, DATEADD(Month, 5 - 1, DATEADD(day, 0, 0))))
GROUP BY Customer) AS Expr1,
[Month]
FROM OTRS_Revised.dbo.Months
GROUP BY [Month]
Hallo, Leider funktioniert es nicht, weil ich keine "Kunden" -Spalte in dbo.Months habe (weil es schwierig wäre, sie alle hinzuzufügen und die Tabelle auf dem neuesten Stand zu halten). Am Ende werden Monate ohne Daten bei dieser Abfrage nicht angezeigt –