Consulta con una query

08/10/2004 - 18:12 por sinma10 | Informe spam
Hola a tod@s!

Tengo que hacer una consulta y no sé bien bien cómo… Me explico:

Tengo una tabla llamada clientes, donde tengo un listado de
clientes, su nombre y un/os usuario/s relacionado/s. P.Ej:
Cliente Usuario Direccion
1 Comercial calle1
2 Comercial calle2
2 facturacion calle3
2 administracion calle4
3 comercial calle5
3 administracion calle6

De estos datos, necesito recoger el código y la dirección, pero
teniendo en cuenta que:
Si el cliente no está repetido, como en el caso del cliente 1, debo
recoger la direccion correspondiente (independientemente del usuario),
que sería "calle1"
Si el cliente está repetido, como en el caso del cliente 2, debo
coger la dirección correspondiente al usuario "facturacion" en el caso
de que la haya, que en este caso sería "calle3", y si no la hay,
coger la primera que encuentre, como en el caso de cliente 3, que
cojería "calle5".

Estoy dándole vueltas a cómo hacerlo, pero se me enciende la
lucecilla…
Agradecería mucho a quien puediera ayudarme a solucionarlo.

Muchas gracias!
 

Leer las respuestas

#1 SqlRanger
08/10/2004 - 18:54 | Informe spam
Si los diferentes usuarios no son muchos podrías utlizar una solución como
esta:

create table clientes (
Cliente int,
Usuario varchar(50),
Dirección varchar(50)
)

go

insert into clientes values(1, 'Comercial', 'calle1')
insert into clientes values(2, 'Comercial', 'calle2')
insert into clientes values(2, 'facturacion', 'calle3')

insert into clientes values(2, 'administracion', 'calle4')
insert into clientes values(3, 'Comercial', 'calle5')
insert into clientes values(1, 'administracion', 'calle6')

go

create function ValorUsuario( @Usuario varchar(50) )
returns int
as
begin
declare @valor int
if @Usuario = 'facturacion'
set @valor = 1
if @Usuario = 'comercial'
set @valor = 2
if @usuario = 'administracion'
set @valor = 3
return @valor
end


go

select c.*
from clientes c join
(select Cliente, Min(dbo.ValorUsuario(Usuario)) As Valor from Clientes
group by Cliente) c2
on c.Cliente = c2.Cliente and dbo.ValorUsuario(c.Usuario) = c2.Valor


Si son muchos sería mejor tener una tabla ValoresUsuarios con todos los
distintos usuarios y un valor asignado y en vez de usar la función meter la
tabla con un join.

Saludos:

Jesús López
MVP


"Inma" escribió en el mensaje
news:
Hola a !

Tengo que hacer una consulta y no sé bien bien cómo. Me explico:

Tengo una tabla llamada clientes, donde tengo un listado de
clientes, su nombre y un/os usuario/s relacionado/s. P.Ej:
Cliente Usuario Direccion
1 Comercial calle1
2 Comercial calle2
2 facturacion calle3
2 administracion calle4
3 comercial calle5
3 administracion calle6

De estos datos, necesito recoger el código y la dirección, pero
teniendo en cuenta que:
Si el cliente no está repetido, como en el caso del cliente 1, debo
recoger la direccion correspondiente (independientemente del usuario),
que sería "calle1"
Si el cliente está repetido, como en el caso del cliente 2, debo
coger la dirección correspondiente al usuario "facturacion" en el caso
de que la haya, que en este caso sería "calle3", y si no la hay,
coger la primera que encuentre, como en el caso de cliente 3, que
cojería "calle5".

Estoy dándole vueltas a cómo hacerlo, pero se me enciende la
lucecilla.
Agradecería mucho a quien puediera ayudarme a solucionarlo.

Muchas gracias!

Preguntas similares