Mareado con consulta

24/09/2008 - 01:23 por Penta | Informe spam
Estimados.
Utilizo SS2000 SP4

Tengo una tabla llamada situaciones, la cual tiene:

Codigo_Cliente varchar(20)
tipositu Int

Puedo tener un Codigo_Cliente con diferente Tipo:

Codigo_Cliente Tipo
1234 1
1234 2
1235 1

Necesito una consulta que me devuelva:
Codigo_Cliente tipositu
1234 2
1235 1

Es decir, en caso de tener el tipositu =2 me debe seleccionar dicho
registro, si no lo tiene me muestra el registro de tipositu =1

Tengo esto:
Select Codigo_Cliente ,tipositu From ra_situ A
Where codcli='1234' and tipositu in(2,1)
and not exists
(
Select Codigo_Cliente ,tipositu From ra_situ b
Where Codigo_Cliente ='1234' and tipositu in(1)
and a.Codigo_Cliente =b.Codigo_Clienteand a.tipositu=b.tipositu
)

Pero claramente estoy errado. En algun momento lo hice con UNION pero
no es lo mas elegante :)

Atte.
Penta.

Preguntas similare

Leer las respuestas

#1 Pedro
24/09/2008 - 02:01 | Informe spam
No entendi bien ya que no se discrimina el registro segun lo explicas.
Podrias aclarar mejor?

"Penta" escribió en el mensaje
news:
Estimados.
Utilizo SS2000 SP4

Tengo una tabla llamada situaciones, la cual tiene:

Codigo_Cliente varchar(20)
tipositu Int

Puedo tener un Codigo_Cliente con diferente Tipo:

Codigo_Cliente Tipo
1234 1
1234 2
1235 1

Necesito una consulta que me devuelva:
Codigo_Cliente tipositu
1234 2
1235 1

Es decir, en caso de tener el tipositu =2 me debe seleccionar dicho
registro, si no lo tiene me muestra el registro de tipositu =1

Tengo esto:
Select Codigo_Cliente ,tipositu From ra_situ A
Where codcli='1234' and tipositu in(2,1)
and not exists
(
Select Codigo_Cliente ,tipositu From ra_situ b
Where Codigo_Cliente ='1234' and tipositu in(1)
and a.Codigo_Cliente =b.Codigo_Clienteand a.tipositu=b.tipositu
)

Pero claramente estoy errado. En algun momento lo hice con UNION pero
no es lo mas elegante :)

Atte.
Penta.
Respuesta Responder a este mensaje
#2 Penta
24/09/2008 - 03:04 | Informe spam
Bueno al poner la consulta claro que se ve que no da el resultado
deseado.

Basicamente es esto:

Codigo_Cliente Tipo
1234 1
1234 2
1235 1

Necesito una consulta que me devuelva:
Codigo_Cliente tipositu
1234 2
1235 1

Que devuelva todos los registros que tienen tipo=2 (caso 1234), pero
si algun registro no tiene el tipo=2 que devuelva los que tienen
tipo=1 (caso 1235)

Finalmente lo hice con una subconsulta con Select max(tipositu) etc
etc pero no se si es lo optimo.

Atte.
Penta.
Respuesta Responder a este mensaje
#3 Alejandro Mesa
24/09/2008 - 03:47 | Informe spam
Trata:

select codigo_cliente, max(tipositu) as tipositu
from t
where tipositu in (1, 2)
group by codigo_cliente
go


AMB


"Penta" wrote:

Estimados.
Utilizo SS2000 SP4

Tengo una tabla llamada situaciones, la cual tiene:

Codigo_Cliente varchar(20)
tipositu Int

Puedo tener un Codigo_Cliente con diferente Tipo:

Codigo_Cliente Tipo
1234 1
1234 2
1235 1

Necesito una consulta que me devuelva:
Codigo_Cliente tipositu
1234 2
1235 1

Es decir, en caso de tener el tipositu =2 me debe seleccionar dicho
registro, si no lo tiene me muestra el registro de tipositu =1

Tengo esto:
Select Codigo_Cliente ,tipositu From ra_situ A
Where codcli='1234' and tipositu in(2,1)
and not exists
(
Select Codigo_Cliente ,tipositu From ra_situ b
Where Codigo_Cliente ='1234' and tipositu in(1)
and a.Codigo_Cliente =b.Codigo_Clienteand a.tipositu=b.tipositu
)

Pero claramente estoy errado. En algun momento lo hice con UNION pero
no es lo mas elegante :)

Atte.
Penta.

Respuesta Responder a este mensaje
#4 Leonardo Azpurua
24/09/2008 - 16:40 | Informe spam
"Penta" escribió en el mensaje
news:
Bueno al poner la consulta claro que se ve que no da el resultado
deseado.

Basicamente es esto:

Codigo_Cliente Tipo
1234 1
1234 2
1235 1

Necesito una consulta que me devuelva:
Codigo_Cliente tipositu
1234 2
1235 1

Que devuelva todos los registros que tienen tipo=2 (caso 1234), pero
si algun registro no tiene el tipo=2 que devuelva los que tienen
tipo=1 (caso 1235)

Finalmente lo hice con una subconsulta con Select max(tipositu) etc
etc pero no se si es lo optimo.



Hola.

Lo "óptimo" es lo más directo.

Nuestro trabajo es resolver el problema.

Si tienes dos soluciones con niveles de complejidad textual equivalentes,
podrías medir el rendimiento de ambas en diferentes condiciones y determinar
cual da mejores resultados.

Pero en este caso tienes una opción que se basa en construcciones
intrínsecas de T-SQL (SELECT Codigo_Cliente, MAX(TipoSitu) FROM Situaciones
GROUP BY Codigo_Cliente) frente a una consulta con un filtro basado en
subconsultas definidas por tí, mucho más compleja que la primera.

Una regla de oro, que en este caso cae como pedrada en ojo de boticario es
"más simple es mejor".


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