To dwie z danymi
Table1 Table2
ID ColA ID ColB
01 10 01 20
02 20 02 Null
03 30 03 30
04 25 04 Null
więc chcę odjąć od Col1 do Col2
już piszę sql Query, ale nie działa poprawnie
select (Table1.ColA-Table2.ColB)as Temp from Table1
inner join Table2 on Table1.ID Table2.ID
więc moje pytanie brzmi, gdy wartość null pobierająca z table2 odejmowanie czasu nie została wykonana, co zrobi, aby rozwiązać ten problem
Chcę, gdy wartość ma wartość null, że czas przyjmuje wartość 0
Odpowiedzi:
2 dla odpowiedzi № 1Możesz użyć COALESCE do domyślnego null
do 0
:
select COALESCE(Table1.ColA, 0) - COALESCE(Table2.ColB, 0) as Temp
from Table1 inner join Table2 on Table1.ID Table2.ID
COALESCE akceptuje wiele parametrów i zwraca pierwszą wartość inną niż null.
W niektórych bazach danych istnieje skrócona funkcja COALESCE, jeśli potrzebujesz tylko dwóch parametrów. Funkcje te mogą mieć takie nazwy jak nvl
, ifnull
, isnull
, w zależności od bazy danych lub w ogóle może nie istnieć. COALESCE
z drugiej strony jest dostępna w większości baz danych, więc jest to dobry wybór.
0 dla odpowiedzi nr 2
Jeśli używasz SQL Server lub TSQL isnull()
lubię to:
select (isnull(Table1.ColA, 0) - isnull(Table2.ColB, 0))as Temp from Table1
inner join Table2 on Table1.ID Table2.ID
Jeśli korzystasz z innego użycia DBMS COALESCE
lub ifnull()
zamiast isnull()
.
0 dla odpowiedzi № 3
Wypróbuj funkcję IFNULL sql lub mysql
select ((IFNULL(Table1.ColA, 0))- (IFNULL(Table2.ColB, 0))) as Temp from Table1 inner join Table2 on Table1.ID = Table2.ID