Zeilen In Spalten und die Gruppierung
Ich habe eine Abfrage, die wie folgt aussieht:
SELECT OrganizationName, OrganizationID, ReceivableStatus, InvoiceFee
FROM v_InvoicesFreelanceOutstanding
ORDER BY OrganizationID
Die Daten aus, die könnte wie folgt Aussehen:
OrganizationName OrganizationID ReceivableStatus InvoiceFee ----------------------------------------------------------------------------- Firma A 139 60-90 Tage 672.00 Firma A 139 60-90 Tage 1800.00 Firma A 139 über 90 Tage 1440.00 Firma B 264 Aktuelle 3559.38 Firma B 264 60-90 Tage 3785.50 Firma C 271 60-90 Tage 446.25 Firma C 271, die über 90 Tage 637.50 Firma C 271, die über 90 Tage 1126.25
Was ich will, um schließlich die Anzeige ist so etwas wie dieses (für die Daten oben):
Unternehmen Aktuelle 30-60 Tage 60-90 Tage über 90 Tage Gesamt ----------------------------------------------------------------------------- Unternehmen 0 0 2472.00 0 2472.00 Firma B 3559.38 0 3785.50 0 7344.88 Firma C 0 0 446.25 1763.75 2210.00
Meine SQL-fu ist nicht genug, um mich vorbei:
SELECT
MAX(OrganizationName) as OrganizationName,
OrganizationID,
ReceivableStatus,
SUM(InvoiceFee) as TotalDue
FROM v_InvoicesFreelanceOutstanding
GROUP BY OrganizationID, ReceivableStatus
Das zeigt, so etwas wie dieses (erneut aus den Daten oben):
OrganizationName OrganizationID ReceivableStatus TotalDue ----------------------------------------------------------------------------- Firma A 139 60-90 Tage 2472.00 Firma A 139 über 90 Tage 1440.00 Firma B 264 Aktuelle 3559.38 Firma B 264 60-90 Tage 3785.50 Firma C 271 60-90 Tage 446.25 Firma C 271, die über 90 Tage 1763.75
Was dann? Jede Hilfe würde geschätzt werden.
Beachten Sie, dass der Status angezeigt, in der 2. Tabelle (Current
, 30-60 days
, 60-90 days
, over 90 days
) sind die einzigen, die ich erwarte zu kommen unter ReceivableStatus
.
BEARBEITEN: Sorry für die nicht darunter. Ich bin mir bewusst PIVOT
aber ich konnte es nicht zu tun, was ich will.
InformationsquelleAutor Paolo Bergantino | 2009-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser sieht aus wie ein job für
pivot
wenn Sie mithilfe von SQL Server 2005 oder höher.EDIT:
Da Sie bereits wissen, über
pivot
Sie wissen, es macht fast das, was Sie brauchen.Haben Sie bereits die folgende Abfrage:
Gibt Ihnen die aktuelle, 30-60, 60-90 und 90+ Teile, die Sie benötigen. Wenn Sie pivot -, dass Sie alles bekommen, was Sie brauchen, außer für Ihre insgesamt. So werfen nur in der Summe:
Pivot auf dieses Ergebnis, und Sie sollten die Ausgabe, die Sie wollen:
Ich bin ein idiot. Meine erste PIVOT ist, was Sie haben, aber ich habe SUM(InvoiceFee) statt SUM(TotalDue) in der PIVOT-Klausel. Boohoo. Es funktioniert, aber. Danke.
Wir alle machen Fehler. Das wichtigste ist, dass wir von Ihnen lernen. Ich bin nur froh, dass ich helfen konnte.
InformationsquelleAutor Welbog
PIVOT saugt. Es hat schreckliche syntax und nicht ein PIVOT im pivot-Tabelle Sinn, d.h. Sie müssen genau wissen, wie viele Spalten das Ergebnis im Voraus.
Ist es wahrscheinlich einfacher, ein cross-tab-Berichts.
Und ich will wissen, wie viele Spalten das Ergebnis im Voraus, so bin ich okay mit PIVOT, wenn es wird den job zu erledigen, obwohl die syntax macht mein Kopf weh.
COUNTIF()
ist eine sauberere und bessere Weg, das zu tunSUM(CASE())
InformationsquelleAutor adolf garlic
Gut, hier ist ein weiterer Zapfen 🙂
InformationsquelleAutor Christopher Klein
Habe ich nicht verwendet, pivot vor, so dass möglicherweise deine Antwort, aber ich verwendet habe, brute-force auf ein problem wie dieses in der Vergangenheit und für Sie würde es so Aussehen:
Grundsätzlich, die innere Abfrage gibt Ihnen die Ergebnisse für jede Organisation und eine Summe für jede einzelne Kategorie und der äußeren Abfrage aggregiert alle von Ihnen in einzelne Zeilen für jede Organisation. Wieder, dies ist vielleicht nicht die eleganteste oder effizientesten Weg zu gehen, aber es ist ein Weg.
InformationsquelleAutor AdamB
Ich denke, dass Ihr auf der Suche nach der pivot-und unpivot-Funktionalität.
Werfen Sie einen Blick auf diese: http://msdn.microsoft.com/en-us/library/ms177410.aspx
InformationsquelleAutor Gustavo