none
consulta sql RRS feed

  • Pregunta

  • buenos dias a todos

    quisiera contar con su colaboración para resolver un problema que tengo con una consulta.

    resulta que tengo una tabla donde tengo almacenado los siguientes dato:

    codigo       cantidad

    1111---> 2

    1111*O-->1

    1111*B -->1

    22222

    33333

    44444

    55555

    mi duda es como puedo consultar los codigo se repiten aunque al final tenga *O ó *Bosea quiero que me traiga solamente (1111 - 1111*O - 1111*B

    les agradezgo mucho su ayuda

    lunes, 19 de diciembre de 2016 15:59

Respuestas

Todas las respuestas

  • Trata con el operador LIKE.

    ...
    where col1 LIKE '1111_[OB]'

    ...
    where col1 LIKE '1111%'

    Todo dependera del patron a buscar.

    Ejemplo:

    DECLARE @s varchar(50) = '1111';
    
    DECLARE @T table (
    col1 varchar(50) NOT NULL PRIMARY KEY
    )
    
    INSERT INTO @T (col1)
    SELECT col1
    FROM (VALUES ('1111'), ('1111*O'), ('1111*B'), ('2222')) AS T1(col1);
    
    SELECT *
    FROM @T
    WHERE col1 = @s
    UNION ALL
    SELECT *
    FROM @T
    WHERE col1 LIKE @s + '*[OB]';
    
    SELECT *
    FROM @T
    WHERE col1 = @s OR col1 LIKE @s + '*[OB]';
    GO
    Si adicionas la opcion RECOMPILE podras notar cambios en el plan de ejecucion.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas





    lunes, 19 de diciembre de 2016 16:02
  • _johan,

    En caso los caracteres que van al final sean variados:

    DECLARE @T table (codigo varchar(100), cantidad int)
    INSERT INTO @T VALUES
    ('1111', 1), ('1111*O', 2), ('1111*B', 3), ('1111-AA', 2), ('1111AAAA', 3),
    ('22222', 4), ('22222-T1', 4), ('33333', 5), ('44444', 6), ('55555', 7);
    
    WITH T AS
    (
        SELECT
    	   t1.codigo
        FROM
    	   @T t1
    	   INNER JOIN @T t2 ON (t2.codigo LIKE t1.codigo + '%')
    		  AND (t2.codigo <> t1.codigo)
        GROUP BY
    	   t1.codigo
    )
    SELECT
        t1.codigo, t1.cantidad
    FROM
        @T t1
        INNER JOIN T t2 ON (t1.codigo LIKE t2.codigo+ '%');


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 19 de diciembre de 2016 16:24
  • No estoy seguro si se deba considerar que un codigo pueda formar parte de otro.

    ('11111', 25), ('11111*B', 26)

    Estos dos codigos macharian con '1111' y resultaria multiples veces en la salida, al menos que se rellene con ceros hasta una determinada longitud o se tenga un conjunto pequenio de separadores.

    DECLARE @T table (codigo varchar(100) PRIMARY KEY, cantidad int)
    INSERT INTO @T VALUES
    ('1111', 1), ('1111*O', 2), ('1111*B', 3), ('1111-AA', 2), ('1111AAAA', 3),('11111', 25), ('11111*O', 26),
    ('22222', 4), ('22222-T1', 4), ('33333', 5), ('44444', 6), ('55555', 7);
    
    WITH T AS
    (
        SELECT
    	   t1.codigo
        FROM
    	   @T t1
    	   INNER JOIN @T t2 ON (t2.codigo LIKE t1.codigo + '%')
    		  AND (t2.codigo <> t1.codigo)
        GROUP BY
    	   t1.codigo
    )
    SELECT
        t1.codigo, t1.cantidad
    FROM
        @T t1
        INNER JOIN T t2 ON (t1.codigo LIKE t2.codigo+ '%');
    
    WITH T AS
    (
        SELECT
    	   t1.codigo
        FROM
    	   @T t1
    	   INNER JOIN 
    	   @T t2 
    	   ON (t2.codigo LIKE t1.codigo + '[-*]%')
        GROUP BY
    	   t1.codigo
    )
    SELECT
        t1.codigo, t1.cantidad
    FROM
        @T t1
        INNER JOIN 
    	T t2 
    	ON t1.codigo = t2.codigo
    	OR (t1.codigo LIKE t2.codigo+ '[-*]%');
    GO


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    lunes, 19 de diciembre de 2016 18:58