Instrução Do Caso Do Servidor SQL quando é nulo
estou a tentar fazer uma função de tipo de declaração IF no servidor SQL.
onde há um NULL no campo, eu quero que ele pegue um campo de uma das tabelas e adicione 10 dias a ele.
e se possível criar outra coluna e adicionar os 30 dias.
SELECT DISTINCT
B.[ID],
MAX(A.[START DATE]),
B.[STAT],
C.[POST DATE],
CASE
WHEN (C.[POST DATE] BETWEEN C.[EVENT DATE]+10 AND C.[EVENT DATE]+30) THEN 'GOOD'
END AS [BETTER VISIT],
CASE
WHEN B.[STAT] IS NULL THEN (C.[EVENT DATE]+10)
ELSE '-'
END AS [DATE]
FROM
#TEMP1 A
FULL OUTER JOIN #TEMP2 B
ON A.[ID]=B.[ID]
FULL OUTER JOIN #TEMP3 C
ON A.[ID]=C.[ID]
GROUP BY
B.[ID],
B.[STAT],
C.[POST DATE],
C.[EVENT DATE]
ORDER BY
A.[START DATE] DESC
o resultado seria parecido com:
ID START DATE STAT POST DATE BETTER VISIT DATE DATE2
---------------------------------------------------------------------------
1 2013-01-01 GOOD 2013-11-01 GOOD - -
2 2013-03-01 NULL NULL NULL 2013-03-11 2013-03-31
7 answers
CASE WHEN B.[STAT] IS NULL THEN (C.[EVENT DATE]+10) -- Type DATETIME
ELSE '-' -- Type VARCHAR
END AS [DATE]
Você precisa selecionar um tipo ou outro para o campo, o tipo de campo não pode variar por linha.
O mais simples é remover o ELSE '-'
e deixá-lo implicitamente obter o valor {[[2]} em vez do segundo caso.
Concordo com Joachim que você deve substituir o hífen por NULL
. Mas, se você realmente quer um hífen, converta a data para um texto:
(CASE WHEN B.[STAT] IS NULL
THEN convert(varchar(10), C.[EVENT DATE]+10, 121)
ELSE '-'
END) AS [DATE]
Também, o distinct
é desnecessário na sua declaração select
. O {[4] } Já Faz isto por ti.
Você pode usar IIF
(penso que a partir do SQL Server 2012)
SELECT IIF(B.[STAT] IS NULL, C.[EVENT DATE]+10, '-') AS [DATE]
case isnull(B.[stat],0)
when 0 then dateadd(dd,10,(c.[Eventdate]))
end
Você pode adicionar em outra declaração se quiser adicionar 30 dias ao mesmo .
O seu hífen na sua declaração ELSE não é aceite na coluna que está a ser definida sob o tipo de dados datetime. Você poderia: [2]
A) enrole um molde em torno do seu campo [stat] para o converter para uma representação varchar de uma data
B) utilize um datetime como 9999-12-31 para o seu outro valor.
Nesta situação, poderá usar a função ISNULL () em vez da expressão de maiúsculas
ISNULL(B.[STAT], C.[EVENT DATE]+10) AS [DATE]
Olha para a função ISNULL. Ele ajuda você a substituir valores nulos para outros valores. http://msdn.microsoft.com/en-us/library/ms184325.aspx