Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-07-2010
RRenault RRenault is offline
Miembro
 
Registrado: may 2003
Posts: 10
Poder: 0
RRenault Va por buen camino
Crear SubConsulta en Sql con datos desde Tabla

Saludos a Todos:
Estoy tratando de crear una subconsulta donde los campos y la tabla estan alojados en una tabla de configuracion. Tengo varios tipos de clientes que sus datos estan en tablas diferentes, pero cuando hago por ejemplo un recibo de ingreso elijo el tipo de cliente y la tabla de sus datos.

la tabla de Configuracion contiene el Tipo de Cliente, la base de datos y el campo de nombre de cliente almacenado.

el Qry es el siguiente:

Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo,
'( Select ' + rtrim(b.clte_descripcion) + ' from ' + rtrim(b.Clte_Database)+ ')' as Clte_Descripcion
From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo

Donde b.CLTE_DESCRIPCION = 'CLTE_NOMBRES' o 'MDCO_NOMBRES'
y b.CLTE_DATABASE = 'DB_INVENTARIOS.DBO.TABLA_DE_CLIENTES' o 'DB_CONSULTORIO.DBO.TABLA_DE_MEDICOS'

El resultado es el siguiente:
1063, 2, 4, ( SELECT MDCO_NOMBRES from DB_CONSULTORIO.DBO.TABLA_MEDICOS)

En lugar de:
1063, 2, 4, DR. LEONARDO ROSARIO

Estoy usando SQL Server 2000
Windows Vista
Gracias.
Responder Con Cita
  #2  
Antiguo 06-07-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
la única opción que se me viene a la mente es utilizar una consulta dinámica con un procedimiento almacenado....

The Curse and Blessings of Dynamic SQL


SQL Stored Procedure - update column/table names via variable
__________________

Responder Con Cita
  #3  
Antiguo 07-07-2010
RRenault RRenault is offline
Miembro
 
Registrado: may 2003
Posts: 10
Poder: 0
RRenault Va por buen camino
Gracias ContraVeneno, probare en los link A ver si puedo lograr algo.
Responder Con Cita
  #4  
Antiguo 07-07-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Es normal que te devuelva eso, estás pasando un literal, la select está entrecomillada.

Puedes hacer una cosa:

Una función
Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo,
FUNCIONNOMBRE(b.clte_descripcion,b.Clte_Database) as Clte_Descripcion
From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo

siendo la funcion quien te devuelva el valor que obtiene (b.clte_descripcion) la select. Ahora, creo que te falta una pieza, que es el código del cliente (a.Clte_Codigo), ya que entiendo que dependerá el valor de lo que devuelva del valor del código.

quedaría así la select modificada

Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo,
FUNCIONNOMBRE(a.Clte_Codigo, b.clte_descripcion,b.Clte_Database) as Clte_Descripcion
From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo

siendo la función la que monte la select

SELECT b.clte_descripcion FROM b.Clte_Database WHERE IDCLIENTE = a.Clte_Codigo

y devuelva el dato.

Nos cuentas.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 08-07-2010
RRenault RRenault is offline
Miembro
 
Registrado: may 2003
Posts: 10
Poder: 0
RRenault Va por buen camino
Gracias por Contestar fjcg02, Hice mas o menos lo siguiente, pero me devuelve lo mismo:



CREATE FUNCTION BuscaCliente(@Clte_Codigo Integer, @Clte_Campo VarChar(40), @Clte_Database VarChar(40), @Tipo_Codigo Integer )
RETURNS VarChar(150) as
BEGIN
declare @Clte_Nombre as varchar(150)
set @Clte_Nombre =

( Select ( ' Select ' + Rtrim(Clte_Descripcion) + ' From ' + Rtrim(Clte_Database) + ' Where ' + Rtrim(Clte_Codigo) + ' = ' + Cast( Clte_Codigo as Char(10)))
From Tabla_Tipos_Clientes Where Tipo_Codigo = @Tipo_Codigo )

return @Clte_nombre
end


Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo,
dbo.BuscaCliente(a.Clte_Codigo, b.clte_descripcion, b.Clte_Database, b.Tipo_Codigo) as Clte_Descripcion
From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo


No se si estoy haciendo algo mal.
Responder Con Cita
  #6  
Antiguo 08-07-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
no se SQL Server, pero basándome en lo que escribes, podría ser lo siguiente


Código SQL [-]
CREATE FUNCTION BuscaCliente(@Clte_Codigo Integer, @Clte_Campo VarChar(40), @Clte_Database VarChar(40), @Tipo_Codigo Integer )
RETURNS VarChar(150) as
BEGIN
declare @Clte_Nombre as varchar(150)

Select  @Clte_nombre=@Clte_Descripcion  From @Clte_Database Where  @Clte_Codigo' =@Clte_Codigo
From Tabla_Tipos_Clientes Where Tipo_Codigo = @Tipo_Codigo

return @Clte_nombre
end

Se supone que la select sólo devuelve un valor, por supuesto.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 09-07-2010
RRenault RRenault is offline
Miembro
 
Registrado: may 2003
Posts: 10
Poder: 0
RRenault Va por buen camino
Aqui se produce un error:

Select @Clte_nombre=@Clte_Descripcion From @Clte_Database Where @Clte_Codigo =@Clte_Codigo
From Tabla_Tipos_Clientes Where Tipo_Codigo = @Tipo_Codigo



Server: Msg 170, Level 15, State 1, Procedure BuscaCliente, Line 9
Line 9: Incorrect syntax near '='.
Responder Con Cita
  #8  
Antiguo 10-07-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
No sé tanto SQLServer como para darte la unción hecha, y tampoco tengo ejemplos para mirar.

Podría ser que @Clte_nombre y @Clte_Descripcion no son del mismo tipo ( VARCHAR (150) ), aunque no estoy seguro.

En Firebird la función es clara, se hace la SELECT campo from tabla where condicion INTO campo

y la variable campo se devuelve.


Mira a ver si encuentras información en la web.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #9  
Antiguo 10-07-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
me he dado cuenta de que está mal escrita la SELECT.

tiene dos FROM, por lo que no creo que el parser del SQLServer lo trague.

Tendrás que poner algo parrecido a esto

Código SQL [-]
SELECT CAMPO
FROM TABLA1 T1 
INNER JOIN TABLA2 T2 ON ( T1.CODIGO=T2.CODIGO)
WHERE ( aqui la condición que pueda ser necesaria )
Supongo que será

Código SQL [-]
Select Clte_Descripcion From Clte_Database CDB
INNER JOIN  Tabla_Tipos_Clientes TTC ON (CDB.Tipo_Codigo = TTC.Tipo_Codigo
Where Clte_Codigo =@Clte_Codigo


Primero haz que te funcione la SELECT y luego vete poniendo parámetros.

Espero que te sirva.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Subconsulta con la misma tabla krls SQL 5 05-04-2008 01:03:51
Crear una Tabla SQL desde la Interfaz Alejandro73 SQL 5 28-11-2006 18:03:18
Crear tabla .BDF desde delphi VRO Conexión con bases de datos 1 02-02-2005 18:08:54
crear tabla desde una consulta sql... ronimaxh SQL 6 27-07-2004 15:57:57
Subconsulta a la misma tabla apicito SQL 3 23-07-2004 21:24:24


La franja horaria es GMT +2. Ahora son las 23:36:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi