Principales respuestas
Condiciones en SQL SERVER con LIKE

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- Editado RavenzGeorge 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
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
-
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 | 1c | 0 | 2 | 2
Estaba imvestigando por ahi y se puede usar la clausula pivot. si me podrias dar una idea muchas gracias
-
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/