Tengo una consulta de artículos (código, nombre y precio), ordenada0 por un código interno de la empresa, entonces,
la búsqueda incremental funciona perfecto. Pero, me reclaman, que tienen el mismo código de
artículo que se repite con diferentes variantes de colores, estas variantes de colores, salen desordenadas.
Cuando hago el ORDER BY codigo,nombre no funciona la búsqueda. Probé con autosort, sin, forzando la búsqueda,
etc etc etc... no hubo forma de que me funcione correcto.
Yo necesito que el xbrowse se ordene en codigo y nombre, pero en columnas diferentes. Y la búsqueda se haga por la primer
columna... alguien me puede ayudar??
Entiendo que estás trabajando con una base de datos y tienes problemas para ordenar y buscar correctamente los artículos debido a las variantes de colores que comparten el mismo código. Aquí te dejo una posible solución:
Solución
- Crear una nueva columna para el ordenamiento: Puedes crear una nueva columna en tu tabla que combine el código del artículo y el nombre del color de manera que sea única y permita un ordenamiento correcto.Por ejemplo, si tienes una tabla
articuloscon las columnascodigo,nombre, ycolor, puedes crear una nueva columna llamadaordenque sea una combinación decodigoynombre:sqlCopyALTER TABLE articulos ADD COLUMN orden VARCHAR(255); UPDATE articulos SET orden = CONCAT(codigo, ' - ', nombre); - Ordenar por la nueva columna: Luego, puedes ordenar tus resultados por la nueva columna
orden:sqlCopySELECT codigo, nombre, precio FROM articulos ORDER BY orden; - Buscar por la primera columna: Para la búsqueda incremental, puedes seguir utilizando la columna
codigocomo criterio de búsqueda. La nueva columnaordensolo se utiliza para el ordenamiento final.sqlCopySELECT codigo, nombre, precio FROM articulos WHERE codigo LIKE '%valor_buscado%' ORDER BY orden;
Ejemplo Completo
Supongamos que tienes los siguientes datos en tu tabla
articulos:Table
| codigo | nombre | color | precio |
|---|---|---|---|
| 001 | Camisa | Rojo | 100 |
| 001 | Camisa | Azul | 120 |
| 002 | Pantalón | Negro | 200 |
Después de crear y actualizar la columna
orden:Table
| codigo | nombre | color | precio | orden |
|---|---|---|---|---|
| 001 | Camisa | Rojo | 100 | 001 - Camisa |
| 001 | Camisa | Azul | 120 | 001 - Camisa |
| 002 | Pantalón | Negro | 200 | 002 - Pantalón |
Ahora, al ejecutar la consulta de búsqueda y ordenamiento:
sql
Copy
SELECT codigo, nombre, precio
FROM articulos
WHERE codigo LIKE '%001%'
ORDER BY orden;Obtendrás los resultados ordenados correctamente por
codigo y nombre, y la búsqueda se realizará por codigo.Consideraciones
- Asegúrate de que la columna
ordensea única para cada fila. Si hay duplicados, puedes agregar más detalles alCONCATpara diferenciarlos. - Si tu base de datos es grande, considera crear un índice en la columna
ordenpara mejorar el rendimiento del ordenamiento.
Espero que esto te ayude a resolver el problema. Si tienes alguna otra duda, no dudes en preguntar.