none
Condiciones en SQL SERVER con LIKE RRS feed

  • Pregunta

  • Chicos que tal tengo una tabla por ejemplo que contiene varios campos por los cuales quiero mostrar todos los campos que no empieza con la Letra B, la letra K y que no empieze por numeros, pero no se realizar la consulta solo trate de hacerlo de esta forma pero creo q necesito una subconsulta y no se como plantearlo.
    Se los Agradeceria mucho. Gracias.

     SELECT codigo,variante, count(*) as Cantidad FROM Catalogo
     where codigo not like'K%' and  codigo not like'[1-9]%'
     Group by codigo,variante
     order by Cantidad desc

    Codigo|Variante|Cantidad
    martes, 19 de enero de 2021 13:56

Respuestas

  • Hola RavenzGeorge:

    Tienes que detallar un poco más el escenario. 

    Te expongo un ejemplo con lo que cuentas y muestras.

    Create table dbo.Catalogo (codigo varchar(100), variante varchar(100))
    go
    insert into dbo.Catalogo(codigo, variante)
    values
    ('a','a1'),
    ('a','a2'),
    ('a','a3'),
    ('a','a1'),
    ('b','b1'),
    ('b','b2'),
    ('b','b3'),
    ('b','b1'),
    ('c','c1'),
    ('c','c2'),
    ('c','c3'),
    ('c','c1'),
    ('K','k1'),
    ('0c','c2'),
    ('1c','c3'),
    ('2c','c1');
    go

    Tal cual lo expresas, solo pareces tener que añadir el like a y poco más.

    SELECT codigo,variante, count(*) as Cantidad FROM Catalogo
     where	codigo not like'K%' 
    	and codigo not like'[1-9]%'
    	and codigo not like 'B%'
     Group by codigo,variante
     order by Cantidad desc

    Los resultados son, códigos que no empiezan por b ni por k ni por un número entre el 1 y el 9. 

    Supongo que no es lo que estás buscando, por tanto si planteas los datos que tienes (un ejemplo donde se pueda observar las diferentes variantes), y el resultado esperado, seguro que encontramos una manera de poder ayudarte.

    • Propuesto como respuesta Alejandro 0991 martes, 19 de enero de 2021 16:45
    • Marcado como respuesta RavenzGeorge martes, 19 de enero de 2021 22:40
    martes, 19 de enero de 2021 14:22

Todas las respuestas

  • Hola RavenzGeorge:

    Tienes que detallar un poco más el escenario. 

    Te expongo un ejemplo con lo que cuentas y muestras.

    Create table dbo.Catalogo (codigo varchar(100), variante varchar(100))
    go
    insert into dbo.Catalogo(codigo, variante)
    values
    ('a','a1'),
    ('a','a2'),
    ('a','a3'),
    ('a','a1'),
    ('b','b1'),
    ('b','b2'),
    ('b','b3'),
    ('b','b1'),
    ('c','c1'),
    ('c','c2'),
    ('c','c3'),
    ('c','c1'),
    ('K','k1'),
    ('0c','c2'),
    ('1c','c3'),
    ('2c','c1');
    go

    Tal cual lo expresas, solo pareces tener que añadir el like a y poco más.

    SELECT codigo,variante, count(*) as Cantidad FROM Catalogo
     where	codigo not like'K%' 
    	and codigo not like'[1-9]%'
    	and codigo not like 'B%'
     Group by codigo,variante
     order by Cantidad desc

    Los resultados son, códigos que no empiezan por b ni por k ni por un número entre el 1 y el 9. 

    Supongo que no es lo que estás buscando, por tanto si planteas los datos que tienes (un ejemplo donde se pueda observar las diferentes variantes), y el resultado esperado, seguro que encontramos una manera de poder ayudarte.

    • Propuesto como respuesta Alejandro 0991 martes, 19 de enero de 2021 16:45
    • Marcado como respuesta RavenzGeorge martes, 19 de enero de 2021 22:40
    martes, 19 de enero de 2021 14:22
  • Gracias, por el apoyo esta bien tu sugerencia, otra consulta  a partir de ese resultado como podria contabilizar cuantos tipos de variantes(en este caso solo tomaremos dos) y sus cantidad respectivo,muestro el resultado de como quedaria la tabla.

    Codigo| Variante a2|Variante c2 | Cantidad |
    a          |  1              | 0                |   1

    c          |  0              | 2                |   2        

    Estaba imvestigando por ahi y se puede usar la clausula pivot. si me podrias dar una idea muchas gracias

    martes, 19 de enero de 2021 22:46
  • Hola Raven2George:

    Si el número de variantes depende de los datos, tienes que hacer un pivot dinámico. 

    No son fáciles al menos al principio

    Declare @columns nvarchar(max);
    Declare @columnsCabecera nvarchar(max);
    Declare @sql nvarchar(max);
    -- obtenemos las columnas.
    SELECT @COLUMNS= STUFF(
    (
    SELECT
       ',' + QUOTENAME(LTRIM(variante))
     FROM
       (SELECT DISTINCT variante
        FROM Catalogo
    	-- SI QUIERES LAS EXCLUSIONES.
    	where	codigo not like'K%' 
    		and codigo not like'[0-9]%'
    		and codigo not like 'B%'
       ) AS T
    ORDER BY 
    	variante 
    FOR XML PATH('')
    ),1,1,'');
    
    -- obtenemos las columnas pero en vez de separadas por comas, separadas por un más 
    -- para poder sumarlas
    SELECT @columnsCabecera= STUFF(
    (
    SELECT
       '+' + QUOTENAME(LTRIM(variante))
     FROM
       (SELECT DISTINCT variante
        FROM Catalogo
    	-- SI QUIERES LAS EXCLUSIONES.
    	where	codigo not like'K%' 
    		and codigo not like'[0-9]%'
    		and codigo not like 'B%'
       ) AS T
    ORDER BY 
    	variante 
    FOR XML PATH('')
    ),1,1,'');
    
    Set @sql = N'
    SELECT p.*, ('+ @columnsCabecera +N') AS Cantidad
    	FROM 
    	( 
    	SELECT codigo, variante
        FROM Catalogo
    	-- SI QUIERES LAS EXCLUSIONES.
    	where	codigo not like ''K%'' 
    		and codigo not like ''[0-9]%''
    		and codigo not like ''B%''
    	) as source
    pivot (COUNT(VARIANTE) For variante in (' + @Columns + N')) AS P;';
    
    EXEC sp_ExecuteSql  @sql 

    Otra opción es hacer un pivot estático, si tienes claras las variantes. Es mucho más fácil.

    Pivot dinámico ¿Cómo hacerlo, y entenderlo?

    https://javifer2.wordpress.com/2019/11/14/pivot-dinamico-como-hacerlo-y-entenderlo/

    Pivot estático ¿Cómo hacerlo, y entenderlo?

    https://javifer2.wordpress.com/2019/10/16/pivot-simple-como-hacer-y-entenderlo-paso-por-paso/

    miércoles, 20 de enero de 2021 5:03