SQL - CASE-Anweisung, wenn-Datensatz NULL ist, weil der Datensatz nicht in der Tabelle

Ich habe ein problem, von dem ich dachte, dass eine der Fragen, die zu lösen wäre am Boden aber ich habe noch ein problem. Das Problem ist mein case-Anweisung falsch ist (läuft aber ohne Fehler), aber unsicher, was ich sonst vermisse.

Mein Ziel ist, wenn DueDate IST NULL, weil es keinen Datensatz in Tabelle2, also alles was ich will ist für diesen Wert angezeigt werden als 'Nein' und nicht 'NULL'. Ich fügte hinzu, "IsNull" in meinem code aber nicht mein problem gelöst. Ich habe gesehen, ISNULL() und COALEASE() auf diesen Foren, aber nicht in der Lage, um mein gewünschtes Ergebnis

Hier mein funktionierenden code unten:

SELECT 
    Client, 
    COUNT(*) AS ReadyRecords, 
    (SELECT COUNT(*) FROM Table1 EPR WHERE actioned=8 AND EPR.Client=Table1.Client) AS Outstanding, 
    (SELECT TOP 1 
        CASE 
            WHEN DueDate < GETDATE() THEN 'Yes' 
            WHEN DueDate IS NULL THEN 'No' 
        ELSE 'No' 
        END AS DueDate
    FROM Table2 GL WHERE GL.Client=Table1.Client ORDER BY DueDate) AS DueDate

    FROM Table1 WHERE Actioned=2 GROUP BY Client

EDIT:

Aktuelle ResultSet:

Client   | ReadyRecords  |  Outstanding  |  DueDate

Test     |     42        |      54       |   NULL
Stack    |     150       |      10       |   NULL
JBloggs  |     32        |      28       |   Yes
DBloggs  |     2         |      17       |   Yes
Overflow |     1         |      1        |   No

Gewünschte Ergebnis Einstellen:

Client   | ReadyRecords  |  Outstanding  |  DueDate

Test     |     42        |      54       |   No
Stack    |     150       |      10       |   No
JBloggs  |     32        |      28       |   Yes
DBloggs  |     2         |      17       |   Yes
Overflow |     1         |      1        |   No

Tabelle 1:

id      |  Client   |   Actioned  | etc...

5245    |  Test     |      8      | etc...
....so on

Tabelle 2:

id   |   Client   |   DueDate

1    |  JBloggs   | 2012-12-01 00:00:00.000
2    |  DBloggs   | 2012-12-05 00:00:00.000
3    |  Overflow  | 2012-12-12 00:00:00.000

Lassen Sie mich wissen, wenn Sie etwas anderes benötigen.

Ähnliche/Verwandte Fragen:

  • Auch Anstelle der count(*) Sie verwenden sollten count(1) dies funktioniert wie count(*) aber viel schneller ausgeführt werden, als wenn Sie *(all) Werte...
  • Danke, ich werde dies von nun an.
  • Ich bin nicht sicher, dass es alle performance-Unterschied zwischen count(*) und count(1) in SQL Server. Siehe die Antwort
InformationsquelleAutor Naxos | 2012-12-06
Schreibe einen Kommentar