mayor de 3 columans

10/11/2006 - 23:32 por Mauro SB. | Informe spam
como hago en un select para eficientemente obtener el mayor valor entre 3
columnasseria algo asi como

select max(col1,col2,col3) as Maxcol from tabla

gracias!!

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera \(MVP\)
11/11/2006 - 01:02 | Informe spam
Una forma de hacerlo es que te programes una función ValorMayor(arg1, arg2,
arg3) y luego la usas: SELECT dbo.ValorMayor(col1, col2, col3) ...

Gustavo Larriera, MVP
Solid Quality
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Blog: http://solidqualitylearning.com/blogs/glarriera/


"Mauro SB." wrote in message
news:
como hago en un select para eficientemente obtener el mayor valor entre 3
columnasseria algo asi como

select max(col1,col2,col3) as Maxcol from tabla

gracias!!

Respuesta Responder a este mensaje
#2 BitOne®
11/11/2006 - 04:55 | Informe spam
Hola Mauro SB:

Aqui te expongo un método sencillo:


use pubs
go
if object_id('valores','U') is not null
drop table valores
go
create table valores(
valor1 int,
valor2 int,
valor3 int
)
go
insert into valores values( 10, 20, 30)
insert into valores values( 10, 40, 30)
insert into valores values( 60, 20, 30)
go
select
case
when valor1 > valor2 and valor1 > valor3 then valor1
when valor2 > valor3 then valor2
when valor3 > valor2 then valor3
else valor1
end
from valores


Saludos,

BitOne®
www.yocsql.com


"Mauro SB." wrote in message
news:
como hago en un select para eficientemente obtener el mayor valor entre 3
columnasseria algo asi como

select max(col1,col2,col3) as Maxcol from tabla

gracias!!


Respuesta Responder a este mensaje
#3 Mauro SB.
11/11/2006 - 07:26 | Informe spam
aunque lo habia hecho como dice Bitone creo que es buena la idea de crear ua
funcion
saludos y gracias a ambos
Mauro
"BitOne®" escribió en el mensaje
news:
Hola Mauro SB:

Aqui te expongo un método sencillo:


use pubs
go
if object_id('valores','U') is not null
drop table valores
go
create table valores(
valor1 int,
valor2 int,
valor3 int
)
go
insert into valores values( 10, 20, 30)
insert into valores values( 10, 40, 30)
insert into valores values( 60, 20, 30)
go
select
case
when valor1 > valor2 and valor1 > valor3 then valor1
when valor2 > valor3 then valor2
when valor3 > valor2 then valor3
else valor1
end
from valores


Saludos,

BitOne®
www.yocsql.com


"Mauro SB." wrote in message
news:
como hago en un select para eficientemente obtener el mayor valor entre 3
columnasseria algo asi como

select max(col1,col2,col3) as Maxcol from tabla

gracias!!






Respuesta Responder a este mensaje
#4 Alejandro Mesa
11/11/2006 - 19:39 | Informe spam
Mauro,

Veamos un ejemplo de como aplicar el nuevo operador "unpivot" (SQL Server
2005) para resolver este problema. Partamos de que nuestra tabla tiene una
clave primaria y que queremos seleccionar el mayor valor entre tres columnas
por cada valor de la pk.

create table dbo.t1(
c1 int not null identity primary key,
c2 int,
c3 int,
c4 int
)
go

insert into dbo.t1(c2, c3, c4) values( 10, 20, 30)
insert into dbo.t1(c2, c3, c4) values( 10, 40, 30)
insert into dbo.t1(c2, c3, c4) values( 60, 20, 30)
go

select
c1,
max(valor) as max_valor
from
(
select
c1,
c2,
c3,
c4
from
dbo.t1
) as t1
unpivot
(
valor for c in (c2, c3, c4)
) as t2
group by
c1
order by
c1
go

drop table dbo.t1
go

Resultado:

c1 max_valor
1 30
2 40
3 60

(3 row(s) affected)

Como pudieramos hacerlo en SQL Server 2000?

Creo que una funcion que use el control de flujo "if... else..." daria un
buen rendimiento. Tambien pudieramos usar una tabla auxiliar de numeros para
simular el operador "unpivot".

select
identity(int, 1, 1) as numero
into
dbo.numero
from
sys.objects
go

select
c1,
max(valor) as max_valor
from
(
select
a.c1,
case b.numero
when 1 then a.c2
when 2 then a.c3
when 3 then a.c4
end as valor
from
dbo.t1 as a
inner join
dbo.numero as b
on b.numero <= 3
) as t
group by
c1
order by
c1
go

Resultado:

c1 max_valor
1 30
2 40
3 60

(3 row(s) affected)

No he comparado rendimiento entre los diferentes caminos aqui expuestos, eso
se lo dejo a Mauro.

Saludos,

AMB

"Mauro SB." wrote:

como hago en un select para eficientemente obtener el mayor valor entre 3
columnasseria algo asi como

select max(col1,col2,col3) as Maxcol from tabla

gracias!!



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida