Opracowałem zapytanie i otrzymałem wyniki dla pierwszych trzech kolumn NULL
. Jak mogę to zastąpić 0
?
Select c.rundate,
sum(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
sum(case when c.runstatus = 'Failed' then 1 end) as Failed,
sum(case when c.runstatus = 'Cancelled' then 1 end) as Cancelled,
count(*) as Totalrun from
( Select a.name,case when b.run_status=0 Then 'Failed' when b.run_status=1 Then 'Succeeded'
when b.run_status=2 Then 'Retry' Else 'Cancelled' End as Runstatus,
---cast(run_date as datetime)
cast(substring(convert(varchar(8),run_date),1,4)+'/'+substring(convert(varchar(8),run_date),5,2)+'/' +substring(convert(varchar(8),run_date),7,2) as Datetime) as RunDate
from msdb.dbo.sysjobs as a(nolock) inner join msdb.dbo.sysjobhistory as b(nolock)
on a.job_id=b.job_id
where a.name='AI'
and b.step_id=0) as c
group by
c.rundate
sql
sql-server
Bhaskar Mishra
źródło
źródło
Odpowiedzi:
Jeśli chcesz zamienić prawdopodobnie
null
kolumnę na coś innego, użyj IsNull .Spowoduje to umieszczenie 0 w myColumn, jeśli jest null w pierwszej kolejności.
źródło
Możesz użyć obu tych metod, ale istnieją różnice:
Porównanie COALESCE () i ISNULL ():
Funkcja ISNULL i wyrażenie COALESCE mają podobny cel, ale mogą zachowywać się inaczej.
Ponieważ ISNULL jest funkcją, jest oceniana tylko raz. Jak opisano powyżej, wartości wejściowe dla wyrażenia COALESCE można oceniać wielokrotnie.
Określenie typu danych w wynikowym wyrażeniu jest inne. ISNULL używa typu danych pierwszego parametru, COALESCE postępuje zgodnie z regułami wyrażeń CASE i zwraca typ danych o najwyższym priorytecie.
NULLability wyrażenia wyniku jest różne dla ISNULL i COALESCE. Zwracana wartość ISNULL jest zawsze uznawana za NIE NULL (zakładając, że wartość zwracana jest wartością niezerową), podczas gdy COALESCE z parametrami niezerowymi jest uważana za NULL. Zatem wyrażenia ISNULL (NULL, 1) i COALESCE (NULL, 1), chociaż równoważne, mają różne wartości null. Ma to znaczenie, jeśli używasz tych wyrażeń w kolumnach obliczanych, tworzysz kluczowe ograniczenia lub określasz wartość zwracaną skalarnej deterministycznej funkcji UDF, aby można ją było indeksować, jak pokazano w poniższym przykładzie.
- Ta instrukcja kończy się niepowodzeniem, ponieważ KLUCZ PODSTAWOWY nie może zaakceptować wartości NULL - a wartość null wyrażenia COALESCE dla kolumny2 - jest obliczana na NULL.
- Ta instrukcja kończy się powodzeniem, ponieważ wartość null funkcji - ISNULL jest obliczana jako NIE NULL.
Walidacje dla ISNULL i COALESCE są również różne. Na przykład wartość NULL dla ISNULL jest konwertowana na int, podczas gdy dla COALESCE należy podać typ danych.
ISNULL przyjmuje tylko 2 parametry, podczas gdy COALESCE przyjmuje zmienną liczbę parametrów.
jeśli chcesz dowiedzieć się więcej, tutaj znajduje się pełny dokument z msdn.
źródło
Z
coalesce
:Chociaż w przypadku sumowania
when condition then 1
równie łatwo można zmienićsum
nacount
- np:(
Count(null)
zwraca 0, asum(null)
zwraca null.)źródło
Kiedy mówisz o pierwszych trzech kolumnach, masz na myśli swoje
SUM
kolumny? Jeśli tak, dodajELSE 0
do swoichCASE
oświadczeń.SUM
ZNULL
wartości jestNULL
.źródło
Prosty sposób to
źródło
Owiń kolumnę w tym kodzie.
Może sprawdź, dlaczego otrzymujesz wartości zerowe
źródło
Use
COALESCE
, która zwraca pierwszą wartość niezerową, npNastąpi powodzenie jako 0, jeśli zostanie zwrócony jako
NULL
.źródło
Dodaj else do instrukcji case, aby domyślnie miały wartość zero, jeśli warunek testowy nie zostanie znaleziony. W tej chwili, jeśli warunek testowy nie zostanie znaleziony, NULL jest przekazywany do funkcji SUM ().
źródło
Jeśli używasz Presto, AWS Athena itp., Nie ma funkcji ISNULL (). Zamiast tego użyj:
źródło
Problem polega na tym, że bez instrukcji else jest zobowiązany do otrzymania wartości Null, gdy stan uruchomienia nie jest określony w opisie kolumny. Dodanie czegokolwiek do wartości Null spowoduje wyświetlenie wartości Null i to jest problem z tym zapytaniem.
Powodzenia!
źródło
postępując zgodnie z poprzednimi odpowiedziami traciłem nazwę kolumny w bazie danych serwera SQL, jednak stosowanie się do tej składni pomogło mi również zachować nazwę kolumny
źródło