valor NULL eliminado por el agregado u otra operación SET ?

27/06/2006 - 19:15 por Matías | Informe spam
Hola a todos, estoy tratando de eliminar columnas de una tabla temporal,
quiero eliminar las columnas que tengan todas sus filas en NULL.
Estoy usando la sentencia:

IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0
BEGIN
ALTER TABLE #temp
DROP COLUMN Colum3

pero me salta la advertencia: valor NULL eliminado por el agregado u otra
operación SET.

EJ.: la tabla temp. es:

Colum1 Colum2 Colum3 Colum4 Colum5

ASDF 5214 NULL 121 NULL
ASDG 4224 NULL 412 12
ASDH 5451 NULL NULL 17

Muchas gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
27/06/2006 - 19:54 | Informe spam
Matías,

IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0



No es necesario contar para averiguar por la existencia de algo en la tabla.

IF not exists(SELECT * FROM #temp WHERE Colum3 IS NOT NULL)
...


AMB



"Matías" wrote:

Hola a todos, estoy tratando de eliminar columnas de una tabla temporal,
quiero eliminar las columnas que tengan todas sus filas en NULL.
Estoy usando la sentencia:

IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0
BEGIN
ALTER TABLE #temp
DROP COLUMN Colum3

pero me salta la advertencia: valor NULL eliminado por el agregado u otra
operación SET.

EJ.: la tabla temp. es:

Colum1 Colum2 Colum3 Colum4 Colum5

ASDF 5214 NULL 121 NULL
ASDG 4224 NULL 412 12
ASDH 5451 NULL NULL 17

Muchas gracias



Respuesta Responder a este mensaje
#2 Matías
27/06/2006 - 20:35 | Informe spam
Gracias Alejandro, probe y me sale el mismo mensaje:
Warning: Null value is eliminated by an aggregate or other SET operation.

te pego el sp (que gracias a tu ayuda pude construir), la sentencia en
cuestion esta al ultimo:

CREATE PROCEDURE pa_select_notas_por_alu_materia(@IdAlumno as int,
@IdMateria as int, @Anio as char(4)) AS SET NOCOUNT ON

create table #temp_notas (IdAlumno varchar(25),IdMateria varchar(25),N1_1
numeric(5, 2),N2_1 numeric(5, 2),N3_1 numeric(5, 2),N4_1 numeric(5, 2),N5_1
numeric(5, 2),
Pro_1 numeric(5, 2),N1_2 numeric(5, 2),N2_2 numeric(5, 2),N3_2
numeric(5, 2),N4_2 numeric(5, 2),N5_2 numeric(5, 2),Pro_2 numeric(5, 2))

insert into #temp_notas(IdAlumno, IdMateria, N1_1, N2_1, N3_1, N4_1, N5_1,
Pro_1, N1_2, N2_2, N3_2, N4_2, N5_2, Pro_2)
select IDAlumno, IDMateria, max(N1_1), max(N2_1), max(N3_1), max(N4_1),
max(N5_1), max(Pro_1), max(N1_2), max(N2_2), max(N3_2), max(N4_2),
max(N5_2), max(Pro_2)
from
(
select a.IDAlumno, a.IDMateria,
case when a.IDEtapa = 1 and count(*) = 1 then max(a.Nota) else null
end as N1_1,
case when a.IDEtapa = 1 and count(*) = 2 then max(a.Nota) else null
end as N2_1,
case when a.IDEtapa = 1 and count(*) = 3 then max(a.Nota) else null
end as N3_1,
case when a.IDEtapa = 1 and count(*) = 4 then max(a.Nota) else null
end as N4_1,
case when a.IDEtapa = 1 and count(*) = 5 then max(a.Nota) else null
end as N5_1,
Pro_1 = (SELECT ROUND(AVG(CAST(a1.Nota as FLOAT)),2)
FROM NOTAS a1
WHERE a.IDMateria = a1.IDMateria and a.IDEtapa = a1.IDEtapa and
a1.IDEtapa = 1 and a.IDAlumno = a1.IDAlumno and DATEPART(yyyy,
a1.FechaExamen) = @Anio and a.IDMateria = @IdMateria),
case when a.IDEtapa = 2 and count(*) = 1 then max(a.Nota) else null
end as N1_2,
case when a.IDEtapa = 2 and count(*) = 2 then max(a.Nota) else null
end as N2_2,
case when a.IDEtapa = 2 and count(*) = 3 then max(a.Nota) else null
end as N3_2,
case when a.IDEtapa = 2 and count(*) = 4 then max(a.Nota) else null
end as N4_2,
case when a.IDEtapa = 2 and count(*) = 5 then max(a.Nota) else null
end as N5_2,
Pro_2 = (SELECT ROUND(AVG(CAST(a1.Nota as FLOAT)),2)
FROM NOTAS a1
WHERE a.IDMateria = a1.IDMateria and a.IDEtapa = a1.IDEtapa and
a1.IDEtapa = 2 and a.IDAlumno = a1.IDAlumno and DATEPART(yyyy,
a1.FechaExamen) = @Anio and a.IDMateria = @IdMateria)
from
notas as a
inner join notas as b on a.IDAlumno = b.IDAlumno
and a.IDMateria = b.IDMateria
and a.IDEtapa = b.IDEtapa
and a.ORDEN >= b.ORDEN
WHERE a.IDAlumno = @IdAlumno and DATEPART(yyyy, b.FechaExamen) = @Anio and
a.IDMateria = @IdMateria
group by a.ORDEN, a.IDAlumno, a.IDMateria, a.IDEtapa
) as t2
group by IDAlumno, IDMateria

IF not exists(SELECT * FROM #temp_notas WHERE N5_1 IS NOT NULL) -- **** aqui
****
BEGIN
ALTER TABLE #temp_notas
DROP COLUMN N5_1
END

select * from #temp_notas


tabla #temp_notas:

IdAlumno IdMateria N1_1 N2_1 N3_1 N4_1
N5_1 Pro_1 N1_2 N2_2 N3_2 N4_2 N5_2 Pro_2
4 4 10.00 3.00
8.00 9.00 NULL 7.40 9.00 6.00 7.00 4.00
NULL 6.50

"Alejandro Mesa" escribió en el
mensaje news:
Matías,

> IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0

No es necesario contar para averiguar por la existencia de algo en la


tabla.

IF not exists(SELECT * FROM #temp WHERE Colum3 IS NOT NULL)
...


AMB



"Matías" wrote:

> Hola a todos, estoy tratando de eliminar columnas de una tabla temporal,
> quiero eliminar las columnas que tengan todas sus filas en NULL.
> Estoy usando la sentencia:
>
> IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0
> BEGIN
> ALTER TABLE #temp
> DROP COLUMN Colum3
>
> pero me salta la advertencia: valor NULL eliminado por el agregado u


otra
> operación SET.
>
> EJ.: la tabla temp. es:
>
> Colum1 Colum2 Colum3 Colum4 Colum5
>
> ASDF 5214 NULL 121 NULL
> ASDG 4224 NULL 412 12
> ASDH 5451 NULL NULL 17
>
> Muchas gracias
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
27/06/2006 - 20:46 | Informe spam
Matías,

Gracias Alejandro, probe y me sale el mismo mensaje:
Warning: Null value is eliminated by an aggregate or other SET operation.



Te sale el mismo mensaje, pero ya no es en la misma sentencia. El mensaje es
una advertencia y no tienes por que preocuparte. Se debe a que la mayoria de
las funciones de grupo no toman en cuenta el valor NULL.

select max(cast(null as int))
go

(1 row(s) affected)

Warning: Null value is eliminated by an aggregate or other SET operation.


AMB

"Matías" wrote:

Gracias Alejandro, probe y me sale el mismo mensaje:
Warning: Null value is eliminated by an aggregate or other SET operation.

te pego el sp (que gracias a tu ayuda pude construir), la sentencia en
cuestion esta al ultimo:

CREATE PROCEDURE pa_select_notas_por_alu_materia(@IdAlumno as int,
@IdMateria as int, @Anio as char(4)) AS SET NOCOUNT ON

create table #temp_notas (IdAlumno varchar(25),IdMateria varchar(25),N1_1
numeric(5, 2),N2_1 numeric(5, 2),N3_1 numeric(5, 2),N4_1 numeric(5, 2),N5_1
numeric(5, 2),
Pro_1 numeric(5, 2),N1_2 numeric(5, 2),N2_2 numeric(5, 2),N3_2
numeric(5, 2),N4_2 numeric(5, 2),N5_2 numeric(5, 2),Pro_2 numeric(5, 2))

insert into #temp_notas(IdAlumno, IdMateria, N1_1, N2_1, N3_1, N4_1, N5_1,
Pro_1, N1_2, N2_2, N3_2, N4_2, N5_2, Pro_2)
select IDAlumno, IDMateria, max(N1_1), max(N2_1), max(N3_1), max(N4_1),
max(N5_1), max(Pro_1), max(N1_2), max(N2_2), max(N3_2), max(N4_2),
max(N5_2), max(Pro_2)
from
(
select a.IDAlumno, a.IDMateria,
case when a.IDEtapa = 1 and count(*) = 1 then max(a.Nota) else null
end as N1_1,
case when a.IDEtapa = 1 and count(*) = 2 then max(a.Nota) else null
end as N2_1,
case when a.IDEtapa = 1 and count(*) = 3 then max(a.Nota) else null
end as N3_1,
case when a.IDEtapa = 1 and count(*) = 4 then max(a.Nota) else null
end as N4_1,
case when a.IDEtapa = 1 and count(*) = 5 then max(a.Nota) else null
end as N5_1,
Pro_1 = (SELECT ROUND(AVG(CAST(a1.Nota as FLOAT)),2)
FROM NOTAS a1
WHERE a.IDMateria = a1.IDMateria and a.IDEtapa = a1.IDEtapa and
a1.IDEtapa = 1 and a.IDAlumno = a1.IDAlumno and DATEPART(yyyy,
a1.FechaExamen) = @Anio and a.IDMateria = @IdMateria),
case when a.IDEtapa = 2 and count(*) = 1 then max(a.Nota) else null
end as N1_2,
case when a.IDEtapa = 2 and count(*) = 2 then max(a.Nota) else null
end as N2_2,
case when a.IDEtapa = 2 and count(*) = 3 then max(a.Nota) else null
end as N3_2,
case when a.IDEtapa = 2 and count(*) = 4 then max(a.Nota) else null
end as N4_2,
case when a.IDEtapa = 2 and count(*) = 5 then max(a.Nota) else null
end as N5_2,
Pro_2 = (SELECT ROUND(AVG(CAST(a1.Nota as FLOAT)),2)
FROM NOTAS a1
WHERE a.IDMateria = a1.IDMateria and a.IDEtapa = a1.IDEtapa and
a1.IDEtapa = 2 and a.IDAlumno = a1.IDAlumno and DATEPART(yyyy,
a1.FechaExamen) = @Anio and a.IDMateria = @IdMateria)
from
notas as a
inner join notas as b on a.IDAlumno = b.IDAlumno
and a.IDMateria = b.IDMateria
and a.IDEtapa = b.IDEtapa
and a.ORDEN >= b.ORDEN
WHERE a.IDAlumno = @IdAlumno and DATEPART(yyyy, b.FechaExamen) = @Anio and
a.IDMateria = @IdMateria
group by a.ORDEN, a.IDAlumno, a.IDMateria, a.IDEtapa
) as t2
group by IDAlumno, IDMateria

IF not exists(SELECT * FROM #temp_notas WHERE N5_1 IS NOT NULL) -- **** aqui
****
BEGIN
ALTER TABLE #temp_notas
DROP COLUMN N5_1
END

select * from #temp_notas


tabla #temp_notas:

IdAlumno IdMateria N1_1 N2_1 N3_1 N4_1
N5_1 Pro_1 N1_2 N2_2 N3_2 N4_2 N5_2 Pro_2
4 4 10.00 3.00
8.00 9.00 NULL 7.40 9.00 6.00 7.00 4.00
NULL 6.50

"Alejandro Mesa" escribió en el
mensaje news:
> Matías,
>
> > IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0
>
> No es necesario contar para averiguar por la existencia de algo en la
tabla.
>
> IF not exists(SELECT * FROM #temp WHERE Colum3 IS NOT NULL)
> ...
>
>
> AMB
>
>
>
> "Matías" wrote:
>
> > Hola a todos, estoy tratando de eliminar columnas de una tabla temporal,
> > quiero eliminar las columnas que tengan todas sus filas en NULL.
> > Estoy usando la sentencia:
> >
> > IF (SELECT COUNT(*) FROM #temp WHERE Colum3 IS NOT NULL) = 0
> > BEGIN
> > ALTER TABLE #temp
> > DROP COLUMN Colum3
> >
> > pero me salta la advertencia: valor NULL eliminado por el agregado u
otra
> > operación SET.
> >
> > EJ.: la tabla temp. es:
> >
> > Colum1 Colum2 Colum3 Colum4 Colum5
> >
> > ASDF 5214 NULL 121 NULL
> > ASDG 4224 NULL 412 12
> > ASDH 5451 NULL NULL 17
> >
> > Muchas gracias
> >
> >
> >



Respuesta Responder a este mensaje
#4 Matías
27/06/2006 - 21:34 | Informe spam
OK, gracias, pensaba que eso me podia causar el error que me da cuando
intento eliminar la columna:

Warning: Null value is eliminated by an aggregate or other SET operation.
Servidor: mensaje 207, nivel 16, estado 1, procedimiento
pa_select_notas_por_alu_materia, línea 6
Invalid column name 'N5_1'.
Servidor: mensaje 207, nivel 16, estado 1, procedimiento
pa_select_notas_por_alu_materia_, línea 49
Invalid column name 'N5_1'.

lo raro es que el 1er error lo da en la linea 6, :
insert into #temp_notas(IdAlumno, IdMateria, N1_1, N2_1, N3_1, N4_1, N5_1,
Pro_1, N1_2, N2_2, N3_2, N4_2, N5_2, Pro_2)

la verdad no entiendo porque, ya que inserto los datos en la tabla temp. y
luego intento eliminar las columnas que me hacen falta.

el error se cuando entra al if:
IF not exists(SELECT * FROM #temp_notas WHERE N5_1 IS NOT NULL)
BEGIN
ALTER TABLE #temp_notas
DROP COLUMN N5_1
END

si no entra al if (porq la columna es cuestion tiene por lo menos un valor
no nulo) funciona bien.

Que podra ser ???

Mil gracias
Respuesta Responder a este mensaje
#5 Alejandro Mesa
27/06/2006 - 22:13 | Informe spam
Matías,

El error te da durante compilacion o durante ejecucion?


AMB

"Matías" wrote:

OK, gracias, pensaba que eso me podia causar el error que me da cuando
intento eliminar la columna:

Warning: Null value is eliminated by an aggregate or other SET operation.
Servidor: mensaje 207, nivel 16, estado 1, procedimiento
pa_select_notas_por_alu_materia, línea 6
Invalid column name 'N5_1'.
Servidor: mensaje 207, nivel 16, estado 1, procedimiento
pa_select_notas_por_alu_materia_, línea 49
Invalid column name 'N5_1'.

lo raro es que el 1er error lo da en la linea 6, :
insert into #temp_notas(IdAlumno, IdMateria, N1_1, N2_1, N3_1, N4_1, N5_1,
Pro_1, N1_2, N2_2, N3_2, N4_2, N5_2, Pro_2)

la verdad no entiendo porque, ya que inserto los datos en la tabla temp. y
luego intento eliminar las columnas que me hacen falta.

el error se cuando entra al if:
IF not exists(SELECT * FROM #temp_notas WHERE N5_1 IS NOT NULL)
BEGIN
ALTER TABLE #temp_notas
DROP COLUMN N5_1
END

si no entra al if (porq la columna es cuestion tiene por lo menos un valor
no nulo) funciona bien.

Que podra ser ???

Mil gracias



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida