COUNT-Ergebnisse aus einer SQL-Abfrage mit einer HAVING-Klausel
Sind Sie in der Lage, verwenden Sie COUNT in einem query mit HAVING-Klausel, so dass der COUNT gibt die Anzahl der Zeilen? Wenn ich versuche, ich bin immer die Zählung der Anzahl der Zeiten, die ID wird in der Tabelle. Hier ist die Abfrage:
SELECT col_appid, min(col_payment_issued_date) as PayDate
FROM tbl_ui_paymentstubs
WHERE isnull(col_payment_amount,0) > 0
GROUP BY col_appid
HAVING min(col_payment_issued_date) >= '09/01/2010' and min(col_payment_issued_date) <= '09/30/2010'
Bekomme ich wieder 6 Reihen, was in Ordnung ist, aber ich würde gern einfach wieder die Zahl 6.
Ich fand, ich könnte es so machen, aber Frage mich, ob es eine andere, elegantere Möglichkeit:
WITH Claims_CTE(AppID, PayDate) as
(
SELECT col_appid, min(col_payment_issued_date) as PayDate
FROM tbl_ui_paymentstubs
WHERE isnull(col_payment_amount,0) > 0
GROUP BY col_appid
HAVING min(col_payment_issued_date) >= '09/01/2010' and min(col_payment_issued_date) <= '09/30/2010'
)
SELECT count(AppID) as Amount from Claims_CTE
`
- Könntest du bitte einen post über deine Tabellenstruktur? bin verwirrt über, warum bist du mit min in dieser Abfrage...
- Ich finde die frühesten Zahlung für jeden Anspruch (AppID) und wenn Sie, dass die Zahlung der ersten für, die Anspruch und fällt w/i Aktueller Monat, zählen Sie es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
COUNT
mit einemGROUP BY
Klausel wird eine Anzahl für jede Gruppe. Wenn Sie möchten, die Anzahl der Gruppen, es wird eine separate Abfrage (wie Ihre CTE-Beispiel).Ich würde nur eine einfache Unterabfrage, statt der CTE:
WHERE ... IN
- Anweisung mit einen Namen)Können Sie auch eine sub-Abfrage.
Vorausgesetzt, Sie haben eine Tabelle mit den distinct-Liste der col_appid Werte genannt App, ist diese Abfrage auch funktioniert und vielleicht besser die Leistung, zu:
Wenn es keine App, die Tabelle, die Sie ersetzen können
(SELECT DISTINCT col_appid FROM tbl_ui_paymentstubs) A
aber das wird nicht so gut. Es könnte immer noch ein Anwärter im Vergleich zu den anderen Abfragen gegeben.Sonstige Hinweise:
Brauchen Sie nicht zu tun
isnull(column, 0) > 0
weilcolumn > 0
bereits ausgeschlossen werden, Null-Werte.@ar " und "@bdukes' Abfragen brauche nicht alles, was in der inneren SELECT-Klausel können Sie nur WÄHLEN Sie 1 die kann eine performance-Verbesserung (sonst nichts verändert)
Ich hoffe, dass es eine Einschränkung auf col_payment_issued_date so, dass die Werte nicht über ein Zeit-Teil wie 11:23 UHR, sonst wird Ihre ZWISCHEN-Klausel wird schließlich ziehen Sie nicht die richtigen Daten für den gesamten Monat.
Update
@DScott sagte:
Würden Sie bitte versuchen meine Abfrage aus und gibt mir Rückmeldung über seine Leistung im Vergleich zu den anderen Methoden? Ich hoffe, dass selbst mit dem extra-join in der Abfrage, führt es ziemlich gut.