Me gustaría una consulta de SQL Server que encuentre los valores en una celda que llena varias columnas. Por ejemplo, si tengo mesa

 ID     Value1    Value2     Value3
 1        2        NULL      NULL 
 1       NULL      3         NULL 
 1       NULL      NULL       4
 1       3.4       NULL      NULL 
 2       NULL      3         NULL
 2       NULL      NULL      NULL
 3       NULL      NULL       91

Como en la tabla anterior, solo se pueden llenar 2 de las columnas a la vez (la primera es ID y la segunda es Value1, 2 o 3) y la ID se puede repetir varias veces.

Quiero devolver la ID como solo 1 porque 1 es la única ID que llena las otras tres columnas. 2 llena solo Value2 y todos los demás valores de la segunda iteración de 2 son NULL donde 3 está presente solo en Column Value3. ¿Hay alguna manera de que pueda encontrar los Id que llenan todas las otras columnas?

Me encantaría hacer esto preferiblemente sin un cursor, pero puedo ir por el cursor si es obligatorio. Gracias

EDITAR

Mesa deseada:

ID 1

La Declaración debe devolver solo las ID filtradas que pueblan todas las demás columnas.

1
Rohit Raj 25 abr. 2017 a las 14:26

2 respuestas

La mejor respuesta

Prueba esto

SELECT id, 
FROM TableName
GROUP BY id
HAVING MAX(value1) IS NOT NULL AND 
       MAX(value2) IS NOT NULL AND
       MAX(value3) IS NOT NULL
4
Jaydip Jadhav 25 abr. 2017 a las 11:36

Algo que intente si desea algunas líneas de código menos:

select ID from dbo.Table_1  group by ID having count(Value1) > 0 AND count(Value2) > 0 AND count(Value3) >  0
1
Ram Mehta 25 abr. 2017 a las 11:52