Bases de Datos > SQL Server

 Problema En Sentencia Sql

(1/3) > >>

UserCode:
Muy buenas a la presente, saludos

Acudo a la practica más profesional o de mayor conocimiento de SQLs de los presentes para saber si me podria ayudar sobre una SQL que estoy haciendo y de la cual tengo una duda.

Tengo esta SQL:
SELECT  tmp_clientes.nombres, tmp_clientes.apellidos,
   tmp_clientes.nombres, tmp_clientes.apellidos,
   zonas.descripcion,
   clientes.nombres, clientes.apellidos, clientes.direccion1, clientes.telefonos,
   pedidos.id_pedido, pedidos.situacion
FROM tmp_clientes, clientes, zonas, pedidos
WHERE tmp_clientes.cedula=pedidos.id_consultor
AND clientes.cedula=pedidos.id_cliente
AND id_zona='0261' AND id_zona='0264' AND id_zona='0265'
AND pedidos.fechacreacion BETWEEN '01/01/2006' AND '10/04/2008'
AND pedidos.situacion=2

Le falta un poquito en el filtrado, otras cosas, pero ya asi como esta, tengo un problema...

Como se ve, tengo repetido tmp_clientes.nombres y tmp_clientes.apellidos
Eso es porque de una misma tabla debo tomar a dos tipos de personas

Persona 1: Consultor Empresario
Persona 2: Consultor Standar

El problema en esto es que como hago para que al correr el query, pueda tener en la consulta, en una columna al ConsultorEmpresario, y en otra columna al ConsultorStandar, ya que en el filtrado, el campo para validar a ambos, es el mismo.

Mollense:
Podés usar un alias para la tabla, ej:

Si tu tabla se llamara "Personas" -->


--- Código: Text ---SELECT ConsultorEmpresario.nombre, ConsultorEmpresario.apellido, ConsultorStandar.nombre, ConsultorStandar.apellido FROM dbo.Personas AS ConsultorEmpresario,  dbo.Personas AS ConsultorStandar 
Obviamente, al repetirse los nombres de los campos, deberías también colocarle alias a estos, de lo contrario saldrías de la forma "Expr1", "Expr2", etc.

PD: A vuelo de pájaro me llamó la atención esta parte del WHERE:

--- Código: Text ---id_zona='0261' AND id_zona='0264' AND id_zona='0265' Eso es como decir: Quiero que me des un auto siempre y cuando la marca sea Audi "Y" Mercedes Benz "Y" Aston Martin. La condición nunca se cumple.

Un saludo

UserCode:

--- Citar ---PD: A vuelo de pájaro me llamó la atención esta parte del WHERE:

CODE 
id_zona='0261' AND id_zona='0264' AND id_zona='0265'


Eso es como decir: Quiero que me des un auto siempre y cuando la marca sea Audi "Y" Mercedes Benz "Y" Aston Martin. La condición nunca se cumple.

--- Fin de la cita ---

Colocarle Alias a las Tablas y a los Campos ya lo habia tratado, pero no sirve, me repite al Empresario y al Consultor como la misma persona, de ahi esto del problema de sacar a dos personas de una misma tabla.

Quite lo de id_zona='0261'.... etc.. ya que efectivamente la SQL no trae nada con eso, al quitarlo si trae y es cuando veo la repeticion de lo comentado. Pero yo necesito filtrar la informacion por Zona, solo los registros de determinadas regiones (ciudades).

Habia pensado algo que si funcioa en Access, una SQL Padre y otras sub SQLs dentro, algo asi como:

SELECT TablaA.camposX, ...
     (Select campos From TablaB Where TablaA.campo=TablaB.campo) AS CampoY
FROM TablaA, TablaC
WHERE TablaA.campo=TablaC.campo... etc.

Pero SQL Server no lo acepta.

No sabria como proceder con esto, help! :(

Mollense:
Si, claro que se repiten, es que faltaría el Join o un WHERE. Ej:

Si La tabla Personas tuviera un campo "IdPersona" -->


--- Código: Text ---SELECT ConsultorEmpresario.nombre, ConsultorEmpresario.apellido, ConsultorStandar.nombre, ConsultorStandar.apellido FROM dbo.Personas AS ConsultorEmpresario,  dbo.Personas AS ConsultorStandar WHERE ConsultorEmpresario.IdPersona=1 AND ConsultorStandar.IdPersona=2 
Eso solamente traería un registro (Si es que existieran esos códigos de personas), con el nombre y apellido del registro uno y el nombre y apellido del registro dos.

Espero que se entienda

Un saludo

F_Tanori:

--- Cita de: "UserCode" ---Habia pensado algo que si funcioa en Access, una SQL Padre y otras sub SQLs dentro, algo asi como:

SELECT TablaA.camposX, ...
     (Select campos From TablaB Where TablaA.campo=TablaB.campo) AS CampoY
FROM TablaA, TablaC
WHERE TablaA.campo=TablaC.campo... etc.

Pero SQL Server no lo acepta.

No sabria como proceder con esto, help! :(
--- Fin de la cita ---
Que version de SQL Server?

porque si procesa subconsultas, recuerda que las subconsultas no debe retornar mas de 1 fila, ni mas de una columna, puedes usar Top si son repetidos los registros


--- Código: Text ---SELECT TablaA.camposX, ...     (Select top 1 campo From TablaB Where TablaA.campo=TablaB.campo) AS CampoYFROM TablaA, TablaCWHERE TablaA.campo=TablaC.campo 
procura usar columnas indexadas para las relaciones

Si las tablas son muy grandes, las subconsultas se van haciendo menos eficientes seria mejor usar Joins


Puedes poner un ejemplo de tus tablas? y el resultado que esperas obtener con el query para tener una idea mas clara del problema


Saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa