2011-01-05 9 views
1

Ich möchte null ersetzen, den Gesamtwert auf 0 ersetzen, wenn esWie in 0 in einer komplexen Abfrage

Hier null ist, ist die Abfrage:

SELECT DISTINCT(location), (
    SELECT Count(a.location) as total 
    FROM table_fo a 
    LEFT JOIN table_info b ON a.TRADEID = b.TRADEID AND a.asofdate = b.asofdate 
    WHERE (b.TERMSTATUS <> 'TRAN' OR b.TERMSTATUS is NULL) AND b.asofdate = '20110105' AND a.location = pfo.location 
GROUP BY a.LOCATION 
) AS total 
FROM table_fo pfo 
WHERE asofdate = '20110105'; 
+1

können Sie die ISNULL-Funktion verwenden. ISNULL (columnName, 0) – dparker

+0

Sagen Sie uns zuerst, welches Datenbankmodell Sie verwenden. Zweitens glaube ich nicht, dass Ihre Anfrage gültig ist. Die Unterauswahl sollte nur einen Wert zurückgeben. Dies wird jedoch nur bei einem Standort der Fall sein. Drittens glaube ich nicht, dass Count jemals NULL zurückgibt (zumindest für MySQL nicht). –

+3

@ dparker - Sie sollten das als Antwort posten. Das würde meine Antwort sein, aber ich würde mich nicht richtig fühlen, wenn ich sehe, wie du mich dafür geschlagen hast. – David

Antwort

6

Sie die ISNULL Funktion verwenden können.

So verwenden Sie die Funktion (für SQL Server).

ISNULL(columnName, 0) 
+0

Der Name der Funktion, an die Sie gedacht haben, ist 'IFNULL'. 'ISNULL' ist etwas anderes. –

+0

@Alin - In SQL Server verhält sich zumindest "ISNULL" wie "coalesce". –

+0

@Martin Hmm ... habe das nicht erwartet. Ich habe hinzugefügt, dass es für SQL Server ist. –

2

COALESCE wird dies tun, in PL/SQL (Oracle) und T-SQL (SQL Server)

Syntax ist COALESCE(field1, field2[, fieldN]) - es wird die erste Spalte von links wählen Sie einen Nicht-Null-Wert haben .

die Abfrage Ändern Sie hatte:

SELECT DISTINCT(location), COALESCE((
    SELECT Count(a.location) as total 
    FROM table_fo a 
    LEFT JOIN table_info b ON a.TRADEID = b.TRADEID AND a.asofdate = b.asofdate 
    WHERE (b.TERMSTATUS <> 'TRAN' OR b.TERMSTATUS is NULL) AND b.asofdate = '20110105' AND a.location = pfo.location 
GROUP BY a.LOCATION 
),0) AS total 
FROM table_fo pfo 
WHERE asofdate = '20110105'; 
+0

danke !! sehr viel – ray

+0

Dies sollte die akzeptierte Antwort sein – ksugiarto

2

Wie dparker sagte ISNULL (...) wird für einige Arten von SQL arbeiten, obwohl der Name der Funktion unter Datenbankanbieter variieren kann.

Die Funktion in IBM DB2 heißt COALESCE (...), in Oracle SQL beispielsweise NVL (...).

Dieses sehr nützlich sein,

http://www.w3schools.com/sql/sql_isnull.asp

1

Welche DB-System verwenden Sie?

  • SQL-Server, MySQL: IFNULL(value, 0)
  • Oracle: NVL(value, 0)
  • PostgreSQL: COALESCE(value, 0)
3

Ich möchte den gesamten Wert auf 0 ersetzen, wenn es null ist

Dies ist eine unmögliche Situation on Weil:

Die Funktion COUNT gibt immer eine ganze Zahl zurück. Das Ergebnis kann nicht NULL sein!

Wie für einen Ausdruck auf einem bestimmten Standard bei Koaleszenz ist es NULL gibt Funktionen, die in allen wichtigen Datenbanken tun dies (Bsp .: COALESCE, NVL, ISNULL, IFNULL). Die typische Verwendung ist

FUNCTION_NAME(ExpressionThatMayBeNULL, DefaultWhenNull) 

Für Details sollten Sie konsultieren Sie Datenbankhersteller Dokumentation (Sie können es online finden).

+1

@Martin das Fett behoben. –

+0

+1 Gut entdeckt! –

2

Wenn Sie SQL Server verwenden, gibt es die folgenden drei Möglichkeiten, um eine Null durch einen benutzerdefinierten Ersatzwert zu ersetzen. 1. ISNULL 2. COALESCE 3. CASE

Diese Frage auch in einem der Interviews gefragt wird, ich besucht.Hier ist der Link für einen Artikel mit Beispielen. Übrigens gibt es auch ein Video in diesem Artikel.

Different ways to replace NULLS in SQL Server

Verwandte Themen