2016-06-02 14 views
0

Ich versuche, einen Bericht mit 3 Spalten zu erstellen und sie alle stammen aus der gleichen Tabelle mit "lokalen Speicher", "ID", "TotalSpend", "Member Card Number".SQL-Abfrage für sql Lite

Store  Totalnumofmembers TotalSpendforall 
-----  ------------------ --------------- 
Store A  1500     $100.50 
Store B  2000     $500.00 
Store C  400     $300.00 

Und es ist nicht das Ergebnis gibt mir ich wollte, wenn diese Abfrage auszuführen versuchen:

SELECT "Local Store", 
    (SELECT count(ID) FROM ListMembers WHERE Id=a.Id and "Member Card Number" is not null) AS totalnumofmembers, 
    (SELECT sum("total spend") FROM ListMembers WHERE Id=a.Id) AS totalspendforall FROM ListMembers a 
GROUP BY "Local Store" 

Gibt es andere Verfahren außer mit selbst anschließen? Danke

+1

Können Sie posten, was Ihre Abfrage zurückgibt und was ist das erwartete Ergebnis? – istovatis

Antwort

0

Wenn Sie dies in einer Abfrage tun möchten, können Sie eine CASE-Anweisung verwenden, um die bedingte Zählung von Mitgliedern mit gültigen Kartennummern in der gleichen Abfrage wie das Summieren der Gesamtausgaben zu tun.

SELECT `Local Store`, 
    COUNT(CASE WHEN `Member Card Number` IS NOT NULL THEN 1 ELSE 0 END) AS totalnumofmembers, 
    SUM(`total spend`) AS totalspendforall 
FROM ListMembers 
GROUP BY `Local Store` 

Wenn Sie nichts dagegen haben eine Unterabfrage ist, dann können Sie versuchen, die folgenden

SELECT t1.`Local Store`, t1.totalnumofmembers, t2.totalspendforall 
FROM 
(
    SELECT `Local Store`, COUNT(*) AS totalnumofmembers 
    FROM ListMembers 
    WHERE `Member Card Number` IS NOT NULL 
    GROUP BY `Local Store` 
) t1 
INNER JOIN 
(
    SELECT `Local Store`, SUM(`total spend`) AS totalspendforall 
    FROM ListMembers 
    GROUP BY `Local Store` 
) t2 
    ON t1.`Local Store` = t2.`Local Store` 
+0

Vielen Dank für die schnelle Antwort. Ich habe es mit einer anderen Verbindung versucht. Wählen Sie a. "Lokaler Speicher", Anzahl (a.Id) als "Anzahl der Mitglieder", Summe (b. "Gesamtausgaben") von ListMembers a beitreten ListMembers b auf b.id = a.id wo a "Member Card Number" ist nicht null Gruppe von a. "Local Store" ich versuchte mit dem oben genannten und ich denke, es tut, was es ist, wie die Zahlen groß waren, ist schwer zu sagen. ist die Logik korrekt? Entschuldigung, wie kann ich eine Pause in meinem Kommentar als jedes Mal, wenn ich drücke Enter, um zur nächsten Zeile zu gehen die msg wird geschrieben :( – ll2016

+0

... und ... haben Sie noch ein Problem? Möchten Sie die Abfrage Sie buchen versucht? –

+0

nur eine andere Frage, ich möchte jetzt eine weitere Spalte hinzufügen, die Mitglied anmelden, die später als 1. Juni ist.Dies ist anders als meine anderen Mitglieder insgesamt Spalte, weil die Gesamtzahl Spalte alle Mitglieder seit Beginn enthalten würde Spalte sollte nur diejenigen sein, die sich ab dem 1. Juni anmelden Ich habe versucht mit der folgenden Abfrage und die Ergebnisse meiner neuen Spalte ist falsch? – ll2016

0

Thanx. schaffte es, es zu lösen. Wusste nicht, dass SQL Lite nicht die Funktion to_date wie oracle verwendet. Alles gut. Vielen Dank, alles.