Ich versuche Code zu schreiben, der jeden Monat eine Liste ziehen wird. Die Liste zieht mehrere Datensätze für jeden Kunden und ich brauche die Ergebnismenge, um eine Zeile für jeden Kunden mit einer Vielzahl von aggregierten Informationen zurückzugeben.Erstellen einer monatlichen Liste mit einer Zeile aus mehreren Datensätze pro Kunde
So, wenn ich den folgenden Code ausführen, bekomme ich die richtige Antwort für Max
Datum gibt mir die letzte Rechnung für diesen Kunden und ich bekomme die richtige Antwort auf Summe Summe aller noch offenen Rechnungen. Es wird weitere Felder geben, die das Altern auf dem Konto zeigen. Aber ich bekomme so viele Zeilen pro Kunde, wie ich Rechnungen habe, wobei jede Zeile die "richtige" Antwort auf die beiden aggregierten Felder anzeigt.
Ich begann mit dem Nachschlagen Distinct
und kann sehen, dass die meisten Antworten mit Windowing-Funktionen zurückkommen. Ich habe sie vorher nicht benutzt und ich bin verwirrt darüber, dass sie funktionieren. Die Ausgabe muss in einer bestimmten Reihenfolge sein, weshalb ich Dinge so aufgelistet habe, wie ich es tue. An diesem Punkt habe ich so viele Hilfe-Foren gelesen, dass ich mich betrunken fühle, also denke ich, dass mir eine offensichtliche Antwort fehlt.
SELECT cl.[document type] AS [RecordType],
c.[no_],
c.[name],
c.[name 2],
c.[address],
c.[address 2],
c.city,
c.[post code] AS [Zip],
c.[county] AS [State],
c.[country_region code] AS CountyTrim,
Month(Getdate()) AS [FigMonth],
Day(Getdate()) AS [FigDay],
Year(Getdate()) AS [FigYear],
--Next 2 lines should pull last invoice for customer to fill LastSaleDate field
(
SELECT Max(cl2.[posting date])
FROM [dbo].[detailed cust_ ledg_ entry] AS cl2
WHERE cl2.[document type] = 2 AND cl2.[customer no_] = c.[no_]
) AS [LastSaleDate],
c.[payment terms code] AS [Terms 1],
--iif instead of case to fill Terms1Open field
Iif (c.[payment terms code] = 'CreditCard/Pre-Auth', 'N', 'Y') AS [Terms1Open],
--Now totaling invoices per customer
(
SELECT Sum(cl3.[amount])
FROM [dbo].[detailed cust_ ledg_ entry] AS cl3
WHERE cl3.[customer no_] = c.[no_]
GROUP BY cl3.[customer no_]
) AS [DollarsTotal]
FROM [dbo].[customer] AS c
JOIN [dbo].[detailed cust_ ledg_ entry] AS cl
ON c.[no_] = cl.[customer no_]
JOIN [dbo].[cust_ ledger entry] AS l
ON l.[document no_] = cl.[document no_]
WHERE l.[open] = 1
AND cl.[document type] = 2
AND c.[customer posting group] IN ('BIKECUST', 'OUTDRCUST')
ORDER BY c.[no_]
Diese Formatierung bringt mich dazu, meine Augäpfel herauszunehmen und sie mit einem Sandstrahler zu erschießen. Manchmal ist der Alias auf derselben Zeile, manchmal nicht. 10 Minuten aufzuräumen, wäre der erste Schritt. Schritt 2 erhält Hilfe von einem Online-Forum. Für diesen Prozess sollten Sie hier beginnen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –
Autsch! Höre, was du gesagt hast. Wird versuchen, es besser zu machen. Ich habe viele Antworten hier gefunden, also war es einer der ersten Orte, an die ich mich wandte. – cjs