Pregunta SQL Server Return Null si existe


En SQL Server 2008 estoy buscando crear una consulta que devolverá un NULL en un agregado si existe, de lo contrario, estoy buscando el máximo. Este es un ejemplo simplificado ...

Tengo los siguientes datos:

    CO  Loc Term_Dt
    1   A   7/15/2013
    1   B
    1   C   10/30/2000
    2   A   8/10/2008
    2   B   6/1/2015
    2   C   4/30/2010

El resultado que estoy buscando es:

    CO  Term_Dt
    1   NULL
    2   6/1/2015

porque técnicamente la Compañía aún está abierta si al menos una ubicación aún no se ha terminado.

Gracias


5
2017-08-18 16:23


origen


Respuestas:


Solo usa la agregación y un case declaración:

select co,
       (case when count(term_dt) = count(*) then max(term_dt)
        end) as term_dt
from table t
group by co;

count(<column>) cuenta el número de no-NULL valores. Si esto no coincide con todas las filas, entonces al menos una es NULL. No else es necesario para el case, porque el valor predeterminado es NULL.


5
2017-08-18 16:37



Genere un subconjunto de datos con compañías que tengan fechas de término nulas y deje unirse a su súper conjunto. Cualquier registro en la 2ª tabla que no sea nulo que desee mostrar como nulo, use una declaración de caso.

Esto funciona porque nuestra tabla exterior (A) devuelve

CO TERM_DT  
1  7/15/2013
2  6/1/2015  

Pero luego nuestra combinación IZQUIERDA en nuestra vista en línea también agrega B.Co ...

CO TERM_DT   B.CO
1  7/15/2013 1
2  6/1/2015  NULL

Entonces, puede ver que queremos mostrar NULL cuando B.CO no es nulo en lugar de max (TERM_DT) producirá los resultados deseados. Esto se logra mediante una declaración de caso.

SELECT A.Co, 
    Case when B.CO is not null then Max(A.Term_DT) else NULL end as Term_DT
FROM tableName A
LEFT JOIN (SELECT Distinct CO from tableName where Term_dt is null) B
 on A.Co = B.CO
GROUP BY CO

1
2017-08-18 16:30