SubConsulta y LIKE

02/04/2008 - 10:30 por Alf | Informe spam
Tengo una tabla ORIGEN con dos campos Codigo y Descripcion. El codigo es de
tipo caracter pero sólo entran numeros. Todos de la misma longitud, por
ejemplo de 10 números, tipo: "0242421004", "10346471004", etc
Otra Tabla FILTRO con un campo Código donde en ejecución se introducen
filtros posibles, aqui se permite libertad en el tamaño: "12", "01239",
"001292", etc

Se puede en una sóla consulta mostrar los registros de ORIGEN que cumplan
los filtros, es decir, si recorro uno a uno FILTRO, la consulta sería:


SELECT Codigo, Descripcion FROM Origen WHERE Codigo LIKE 'XX%'

donde XX sería el valor de FILTRO.Código.

En una subconsulta tipo:
SELECT Codigo, Descripcion FROM Origen WHERE
(Codigo IN (SELECT FIltro.Codigo FROM Filtro))

no muestra nada porque las longitudes de los datos de Codigo son distintos.

¿Se puede en una sola consulta?

Gracias de antemano.

Un saludo,

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
02/04/2008 - 16:24 | Informe spam
Hola, como lo tiene diseñado va a necesitar utilizar SQL Dinamico para poder
resolver eso.

Aqui le paso un link

http://www.hayes.ch/sql/sql_dinamico.html


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Alf" escribió en el mensaje de
noticias:

Tengo una tabla ORIGEN con dos campos Codigo y Descripcion. El codigo es
de tipo caracter pero sólo entran numeros. Todos de la misma longitud, por
ejemplo de 10 números, tipo: "0242421004", "10346471004", etc
Otra Tabla FILTRO con un campo Código donde en ejecución se introducen
filtros posibles, aqui se permite libertad en el tamaño: "12", "01239",
"001292", etc

Se puede en una sóla consulta mostrar los registros de ORIGEN que cumplan
los filtros, es decir, si recorro uno a uno FILTRO, la consulta sería:


SELECT Codigo, Descripcion FROM Origen WHERE Codigo LIKE 'XX%'

donde XX sería el valor de FILTRO.Código.

En una subconsulta tipo:
SELECT Codigo, Descripcion FROM Origen WHERE
(Codigo IN (SELECT FIltro.Codigo FROM Filtro))

no muestra nada porque las longitudes de los datos de Codigo son
distintos.

¿Se puede en una sola consulta?

Gracias de antemano.

Un saludo,



Respuesta Responder a este mensaje
#2 Alejandro Mesa
02/04/2008 - 16:36 | Informe spam
Alf,

Tipo caracter fijo, o sea CHAR(10)?
Que tal la estructura de la tabla filtro CHAR(10) tambien o VARCHAR(10)?

select t1.*
from t1 inner join filtro as f
on t1.codigo LIKE f.codigo + '%'

En la columna filtro necesitas que el codigo sea VARCHAR(10), de lo
contrario tendriamos una expresion como:

on t1.codigo LIKE '01 %'


AMB


"Alf" wrote:


Tengo una tabla ORIGEN con dos campos Codigo y Descripcion. El codigo es de
tipo caracter pero sólo entran numeros. Todos de la misma longitud, por
ejemplo de 10 números, tipo: "0242421004", "10346471004", etc
Otra Tabla FILTRO con un campo Código donde en ejecución se introducen
filtros posibles, aqui se permite libertad en el tamaño: "12", "01239",
"001292", etc

Se puede en una sóla consulta mostrar los registros de ORIGEN que cumplan
los filtros, es decir, si recorro uno a uno FILTRO, la consulta sería:


SELECT Codigo, Descripcion FROM Origen WHERE Codigo LIKE 'XX%'

donde XX sería el valor de FILTRO.Código.

En una subconsulta tipo:
SELECT Codigo, Descripcion FROM Origen WHERE
(Codigo IN (SELECT FIltro.Codigo FROM Filtro))

no muestra nada porque las longitudes de los datos de Codigo son distintos.

¿Se puede en una sola consulta?

Gracias de antemano.

Un saludo,




Respuesta Responder a este mensaje
#3 Alejandro Mesa
02/04/2008 - 16:46 | Informe spam
Ejemplo:

declare @t1 table (
c1 char(10)
)

insert into @t1 values('0123456789')
insert into @t1 values('1234567890')

declare @t2 table (
c1 varchar(10)
)

insert into @t2 values('01')

select a.*
from @t1 as a inner join @t2 as b on a.c1 like b.c1 + '%'
GO


AMB

"Alejandro Mesa" wrote:

Alf,

Tipo caracter fijo, o sea CHAR(10)?
Que tal la estructura de la tabla filtro CHAR(10) tambien o VARCHAR(10)?

select t1.*
from t1 inner join filtro as f
on t1.codigo LIKE f.codigo + '%'

En la columna filtro necesitas que el codigo sea VARCHAR(10), de lo
contrario tendriamos una expresion como:

on t1.codigo LIKE '01 %'


AMB


"Alf" wrote:

>
> Tengo una tabla ORIGEN con dos campos Codigo y Descripcion. El codigo es de
> tipo caracter pero sólo entran numeros. Todos de la misma longitud, por
> ejemplo de 10 números, tipo: "0242421004", "10346471004", etc
> Otra Tabla FILTRO con un campo Código donde en ejecución se introducen
> filtros posibles, aqui se permite libertad en el tamaño: "12", "01239",
> "001292", etc
>
> Se puede en una sóla consulta mostrar los registros de ORIGEN que cumplan
> los filtros, es decir, si recorro uno a uno FILTRO, la consulta sería:
>
>
> SELECT Codigo, Descripcion FROM Origen WHERE Codigo LIKE 'XX%'
>
> donde XX sería el valor de FILTRO.Código.
>
> En una subconsulta tipo:
> SELECT Codigo, Descripcion FROM Origen WHERE
> (Codigo IN (SELECT FIltro.Codigo FROM Filtro))
>
> no muestra nada porque las longitudes de los datos de Codigo son distintos.
>
> ¿Se puede en una sola consulta?
>
> Gracias de antemano.
>
> Un saludo,
>
>
>
>
Respuesta Responder a este mensaje
#4 Alf
03/04/2008 - 10:07 | Informe spam
No se si te he entendido correctamente. Siguiendo elejemplo si hago la
consulta:

SELECT Origen.C_c, Filtro.C_c AS Expr1
FROM Origen INNER JOIN
Filtro ON Origen.C_c LIKE Filtro.C_c + '%'


No me funciona. Sólo me sale un registro. El campo C_c en Filtro lo tengo
como Varchar.


En lo referente a SQL Dinamico, lo estoy mirando.

Gracias a ambos.

Un saludo.




"Alejandro Mesa" escribió en el
mensaje news:
Ejemplo:

declare @t1 table (
c1 char(10)
)

insert into @t1 values('0123456789')
insert into @t1 values('1234567890')

declare @t2 table (
c1 varchar(10)
)

insert into @t2 values('01')

select a.*
from @t1 as a inner join @t2 as b on a.c1 like b.c1 + '%'
GO


AMB

"Alejandro Mesa" wrote:

Alf,

Tipo caracter fijo, o sea CHAR(10)?
Que tal la estructura de la tabla filtro CHAR(10) tambien o VARCHAR(10)?

select t1.*
from t1 inner join filtro as f
on t1.codigo LIKE f.codigo + '%'

En la columna filtro necesitas que el codigo sea VARCHAR(10), de lo
contrario tendriamos una expresion como:

on t1.codigo LIKE '01 %'


AMB


"Alf" wrote:

>
> Tengo una tabla ORIGEN con dos campos Codigo y Descripcion. El codigo
> es de
> tipo caracter pero sólo entran numeros. Todos de la misma longitud, por
> ejemplo de 10 números, tipo: "0242421004", "10346471004", etc
> Otra Tabla FILTRO con un campo Código donde en ejecución se introducen
> filtros posibles, aqui se permite libertad en el tamaño: "12", "01239",
> "001292", etc
>
> Se puede en una sóla consulta mostrar los registros de ORIGEN que
> cumplan
> los filtros, es decir, si recorro uno a uno FILTRO, la consulta sería:
>
>
> SELECT Codigo, Descripcion FROM Origen WHERE Codigo LIKE 'XX%'
>
> donde XX sería el valor de FILTRO.Código.
>
> En una subconsulta tipo:
> SELECT Codigo, Descripcion FROM Origen WHERE
> (Codigo IN (SELECT FIltro.Codigo FROM Filtro))
>
> no muestra nada porque las longitudes de los datos de Codigo son
> distintos.
>
> ¿Se puede en una sola consulta?
>
> Gracias de antemano.
>
> Un saludo,
>
>
>
>
Respuesta Responder a este mensaje
#5 Alejandro Mesa
03/04/2008 - 14:49 | Informe spam
Alf,

Facil, pudieras postear la estructura de ambas tablas, incluyendo indices y
restricciones, alguna data de ejemplo en forma de sentencias "insert" y
cuales son los resultados esperados.?

De esa forma no tendremos que inmaginarnos lo que pasa, la ayuda de ser
mutua, correcto?

AMB

"Alf" wrote:

No se si te he entendido correctamente. Siguiendo elejemplo si hago la
consulta:

SELECT Origen.C_c, Filtro.C_c AS Expr1
FROM Origen INNER JOIN
Filtro ON Origen.C_c LIKE Filtro.C_c + '%'


No me funciona. Sólo me sale un registro. El campo C_c en Filtro lo tengo
como Varchar.


En lo referente a SQL Dinamico, lo estoy mirando.

Gracias a ambos.

Un saludo.




"Alejandro Mesa" escribió en el
mensaje news:
> Ejemplo:
>
> declare @t1 table (
> c1 char(10)
> )
>
> insert into @t1 values('0123456789')
> insert into @t1 values('1234567890')
>
> declare @t2 table (
> c1 varchar(10)
> )
>
> insert into @t2 values('01')
>
> select a.*
> from @t1 as a inner join @t2 as b on a.c1 like b.c1 + '%'
> GO
>
>
> AMB
>
> "Alejandro Mesa" wrote:
>
>> Alf,
>>
>> Tipo caracter fijo, o sea CHAR(10)?
>> Que tal la estructura de la tabla filtro CHAR(10) tambien o VARCHAR(10)?
>>
>> select t1.*
>> from t1 inner join filtro as f
>> on t1.codigo LIKE f.codigo + '%'
>>
>> En la columna filtro necesitas que el codigo sea VARCHAR(10), de lo
>> contrario tendriamos una expresion como:
>>
>> on t1.codigo LIKE '01 %'
>>
>>
>> AMB
>>
>>
>> "Alf" wrote:
>>
>> >
>> > Tengo una tabla ORIGEN con dos campos Codigo y Descripcion. El codigo
>> > es de
>> > tipo caracter pero sólo entran numeros. Todos de la misma longitud, por
>> > ejemplo de 10 números, tipo: "0242421004", "10346471004", etc
>> > Otra Tabla FILTRO con un campo Código donde en ejecución se introducen
>> > filtros posibles, aqui se permite libertad en el tamaño: "12", "01239",
>> > "001292", etc
>> >
>> > Se puede en una sóla consulta mostrar los registros de ORIGEN que
>> > cumplan
>> > los filtros, es decir, si recorro uno a uno FILTRO, la consulta sería:
>> >
>> >
>> > SELECT Codigo, Descripcion FROM Origen WHERE Codigo LIKE 'XX%'
>> >
>> > donde XX sería el valor de FILTRO.Código.
>> >
>> > En una subconsulta tipo:
>> > SELECT Codigo, Descripcion FROM Origen WHERE
>> > (Codigo IN (SELECT FIltro.Codigo FROM Filtro))
>> >
>> > no muestra nada porque las longitudes de los datos de Codigo son
>> > distintos.
>> >
>> > ¿Se puede en una sola consulta?
>> >
>> > Gracias de antemano.
>> >
>> > Un saludo,
>> >
>> >
>> >
>> >



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