Come posso cambiare NULL su 0 quando si ottiene un singolo valore da una funzione SQL?

StackOverflow https://stackoverflow.com/questions/1005036

  •  05-07-2019
  •  | 
  •  

Domanda

Ho una query che conta il prezzo di tutti gli articoli tra due date. Ecco l'istruzione select:

SELECT SUM(Price) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Puoi presumere che tutte le tabelle siano state impostate correttamente.

Se seleziono tra due date e non ci sono articoli all'interno di quell'intervallo di date, la funzione restituisce NULL come TotalPrice anziché 0.

Come posso assicurarmi che se non viene trovato alcun record, viene restituito 0 anziché NULL?

È stato utile?

Soluzione

La maggior parte dei server di database ha una COALESCE , che restituirà la funzione primo argomento non nullo, quindi quanto segue dovrebbe fare quello che vuoi:

SELECT COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

[modifica]

Solo per chiarire le cose poiché sembra esserci molta discussione su " COALESCE / ISNULL restituirà comunque NULL se nessuna riga corrisponde " ;, prova questa query puoi copiare e incollare in SQL Server direttamente così com'è:

SELECT coalesce(SUM(column_id),0) AS TotalPrice 
FROM sys.columns
WHERE (object_id BETWEEN -1 AND -2)

Si noti che la clausola where esclude tutte le righe da sys.columns dalla considerazione, ma l'operatore 'sum' risulta comunque restituito una singola riga che è nulla, il che si fonde corregge come una singola riga con uno 0.

Spero che questo aiuti a spiegarlo.

Altri suggerimenti

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Questo dovrebbe fare il trucco.

SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
SELECT COALESCE(
    (SELECT SUM(Price) AS TotalPrice 
    FROM Inventory
    WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
    , 0)

Se la tabella ha righe nella risposta, restituisce SUM (Prezzo). Se SUM è NULL o non ci sono righe, verrà restituito 0.

Mettere COALESCE (SUM (Prezzo), 0) NON funziona in MSSQL se non viene trovata alcuna riga.

Modifica: sembra che tutti gli altri mi abbiano battuto, ahah

Trovato la risposta.

ISNULL () determina cosa fare quando si ha un valore nullo.

In questo caso la mia funzione restituisce un valore nullo, quindi ho dovuto specificare uno 0 da restituire.

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded 
BETWEEN @StartDate AND @EndDate)

Puoi usare

SELECT ISNULL (SUM (ISNULL (Price, 0)), 0) .

Sono sicuro al 99% che funzionerà.

ORACLE / PLSQL:

FUNZIONE NVL

SELECT NVL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Questa istruzione SQL restituisce 0 se SUM (Prezzo) restituisce un valore nullo. Altrimenti, restituirebbe il valore SUM (Price) .

Il modo più semplice per farlo è semplicemente aggiungere zero al tuo risultato.

cioè.

$A=($row['SUM'Price']+0);
echo $A;

spero che questo aiuti !!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top