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

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
28/05/2009 - 03:29 | Informe spam
No se por que use la table derivada para contar.


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
@t
)
SELECT
STUFF(
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


"Alejandro Mesa" wrote:

Menos complicado.

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
STUFF(
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



"Alejandro Mesa" wrote:

> 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
> >
> >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida