Nombres de campo que contengan valores

26/05/2009 - 22:35 por David | Informe spam
Microsoft SQL Server 2000, con todos los Services Pack

Muy buenas, como era de esperar no se ni por donde cogerlo, este es el
escenario

TablaDatos

[id]: clave principal
[c1]: decimal permite NULL
[c2]: decimal permite NULL
[c3]: decimal permite NULL
[c4]: decimal permite NULL


más campos (no interesan para "el problema", filtraré por ellos)

¿Cómo implementar la siguiente consulta?

Devuelve los nombres de los campos c1, c2, c3, c4 siempre y cuando en el
conjunto de los valores devueltos por la consulta una columna no tenga
ningún valor NULL.

¿qué dice, que pregunta?

Veamoslo con ejemplos

c1 c2 c3 c4
null 12 13 11
11 7 22 34
14 14 3 4

La consulta para este conjunto de valores FILTARDOS deberái devolver:
LA RESPUESTA ES: c2,c3,c4

c1 c2 c3 c4
null 12 13 11
11 null 22 34
14 null 3 4

La consulta para este conjunto de valores FILTARDOS deberái devolver:
LA RESPUESTA ES:c3,c4


c1 c2 c3 c4
null 12 13 11
11 7 22 34
14 14 3 null

La consulta para este conjunto de valores devueltos FILTARDOS deberái
devolver:
LA RESPUESTA ES: c2,c3



De antemano muchas gracias
 

Leer las respuestas

#1 Alejandro Mesa
26/05/2009 - 23:16 | Informe spam
David,

Trata:

DECLARE @t TABLE (
c1 INT,
c2 INT,
c3 INT,
c4 INT
);

INSERT INTO @t VALUES ( NULL, 12, 13, 11 );
INSERT INTO @t VALUES ( 11, 7, 22, 34 );
INSERT INTO @t VALUES ( 14, 14, 3, 4 );

WITH r_set
AS
(
SELECT
COUNT(c1) AS cnt_c1,
COUNT(c2) AS cnt_c2,
COUNT(c3) AS cnt_c3,
COUNT(c4) AS cnt_c4,
COUNT(*) AS cnt
FROM
(SELECT 1 AS c0, c1, c2, c3, c4 FROM @t) AS t
GROUP BY
c0
)
SELECT
REVERSE(
STUFF(
REVERSE(
CASE WHEN cnt_c1 = cnt THEN 'c1,' ELSE '' END +
CASE WHEN cnt_c2 = cnt THEN 'c2,' ELSE '' END +
CASE WHEN cnt_c3 = cnt THEN 'c3,' ELSE '' END +
CASE WHEN cnt_c4 = cnt THEN 'c4,' ELSE '' END
), 1, 1, '')
) AS c0
FROM
r_set;
GO


AMB


"David" wrote:

Microsoft SQL Server 2000, con todos los Services Pack

Muy buenas, como era de esperar no se ni por donde cogerlo, este es el
escenario

TablaDatos

[id]: clave principal
[c1]: decimal permite NULL
[c2]: decimal permite NULL
[c3]: decimal permite NULL
[c4]: decimal permite NULL

.
más campos (no interesan para "el problema", filtraré por ellos)

¿Cómo implementar la siguiente consulta?

Devuelve los nombres de los campos c1, c2, c3, c4 siempre y cuando en el
conjunto de los valores devueltos por la consulta una columna no tenga
ningún valor NULL.

¿qué dice, que pregunta?

Veamoslo con ejemplos

c1 c2 c3 c4
null 12 13 11
11 7 22 34
14 14 3 4

La consulta para este conjunto de valores FILTARDOS deberái devolver:
LA RESPUESTA ES: c2,c3,c4

c1 c2 c3 c4
null 12 13 11
11 null 22 34
14 null 3 4

La consulta para este conjunto de valores FILTARDOS deberái devolver:
LA RESPUESTA ES:c3,c4


c1 c2 c3 c4
null 12 13 11
11 7 22 34
14 14 3 null

La consulta para este conjunto de valores devueltos FILTARDOS deberái
devolver:
LA RESPUESTA ES: c2,c3



De antemano muchas gracias




Preguntas similares