Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

ordenamiento de campos

Estas en el tema de ordenamiento de campos en el foro de SQL Server en Foros del Web. Buenas mi consulta es saber si se puede realizar un select con ordenamiento de la siguiente manera: Tengo una tabla de categorias, y dentro de ...
  #1 (permalink)  
Antiguo 29/08/2012, 15:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 13 años, 7 meses
Puntos: 9
Pregunta ordenamiento de campos

Buenas mi consulta es saber si se puede realizar un select con ordenamiento de la siguiente manera:

Tengo una tabla de categorias, y dentro de la misma hay subcategorias de las categorias, y subcategorias de las subcategorias. Algo asi va la cascada.

El problema que tengo es que yo armo un arbol de categorias para mostrar un menu, el cual esta ordenado ascendentemente, pero quieren que se mantenga siempre ordenado ascendentemente excepto que una categorias especifica llamanda Giftcards quede de ultimo en la lista.

Por ejemplo tengo las categorias:

Giftcards
ABARROTES
BEBIDAS
ARTICULOS DE LIMPIEZA
ALIMENTOS Y ACCESORIOS PARA MASCOTAS
PRODUCTOS DESECHABLES Y DE PAPEL
CUIDADO PERSONAL Y COSMETICOS
TODO PARA BEBE

Cuando las muestro me las muestra ordenadas ascendentemente quedando:

ABARROTES
ALIMENTOS Y ACCESORIOS PARA MASCOTAS
ARTICULOS DE LIMPIEZA
BEBIDAS
CUIDADO PERSONAL Y COSMETICOS
Giftcards
PRODUCTOS DESECHABLES DE PAPEL
TODO PARA BEBE

Pero quieren que en vez de eso se muestre:

ABARROTES
ALIMENTOS Y ACCESORIOS PARA MASCOTAS
ARTICULOS DE LIMPIEZA
BEBIDAS
CUIDADO PERSONAL Y COSMETICOS
PRODUCTOS DESECHABLES DE PAPEL
TODO PARA BEBE
Giftcards

Espero haberme explicado lo que necesito, si alguien me puede echar una mano se lo agradeceria, y si hay alguna forma de hacerlo directamente desde el order by les agradeceria infinitamente que me lo hicieran saber. De antemano muchas gracias. :D
  #2 (permalink)  
Antiguo 29/08/2012, 15:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ordenamiento de campos

y porque no agregas un campo orden en tu tabla asi ordenas por ese campo y lo demas no te importa :), porque desde el order by no creo que se pueda :S ya que necesitas que la G o algun otro dato este en un orden diferente, te evitarias muchos problemas agregando el campo orden...


Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. name VARCHAR(50),
  4. orden INT
  5. )
  6.  
  7. INSERT INTO #temp VALUES ('Giftcards',8)
  8. INSERT INTO #temp VALUES ('ABARROTES', 1)
  9. INSERT INTO #temp VALUES ('BEBIDAS', 4)
  10. INSERT INTO #temp VALUES ('ARTICULOS DE LIMPIEZA', 3)
  11. INSERT INTO #temp VALUES ('ALIMENTOS Y ACCESORIOS PARA MASCOTAS', 2)
  12. INSERT INTO #temp VALUES ('PRODUCTOS DESECHABLES Y DE PAPEL', 6)
  13. INSERT INTO #temp VALUES ('CUIDADO PERSONAL Y COSMETICOS', 5)
  14. INSERT INTO #temp VALUES ('TODO PARA BEBE', 7)
  15.  
  16. SELECT name FROM #temp ORDER BY orden ASC
  17.  
  18. ABARROTES
  19. ALIMENTOS Y ACCESORIOS PARA MASCOTAS
  20. ARTICULOS DE LIMPIEZA
  21. BEBIDAS
  22. CUIDADO PERSONAL Y COSMETICOS
  23. PRODUCTOS DESECHABLES Y DE PAPEL
  24. TODO PARA BEBE
  25. Giftcards

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 29/08/2012, 15:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: ordenamiento de campos

ya habia pensado en eso pero el problema es que dentro de la misma tabla se encuentran las subcategorias y ademas de eso las categorias pueden ir aumentando y si la categoria corresponde digamos a la letra B tendria que modificar el orden de todas las demas que van despues de ella, ademas me modificaria el ordenamiento de las subcategorias (que son unas 700 mas o menos XD)

Por eso queria ver si habia alguna manera de hacerlo a nivel de consulta para no modificar la estructura de la tabla porque ya posee datos.

Lo del order by lo decia solo por si acaso existia algo que no hubiese visto XD pero creo que no es asi.

Igualmente tu solucion seria factible si no tuviera datos.

Gracias por ayudar siempre en este foro. :D
  #4 (permalink)  
Antiguo 29/08/2012, 16:38
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ordenamiento de campos

podrias hacer esto

Código SQL:
Ver original
  1. en caso de que solo gifts sea el que esta desordenado:
  2.  
  3. CREATE TABLE #temp
  4. (
  5. name VARCHAR(50),
  6. orden INT
  7. )
  8.  
  9. INSERT INTO #temp VALUES ('Giftcards',8)
  10. INSERT INTO #temp VALUES ('ABARROTES', 1)
  11. INSERT INTO #temp VALUES ('BEBIDAS', 4)
  12. INSERT INTO #temp VALUES ('ARTICULOS DE LIMPIEZA', 3)
  13. INSERT INTO #temp VALUES ('ALIMENTOS Y ACCESORIOS PARA MASCOTAS', 2)
  14. INSERT INTO #temp VALUES ('PRODUCTOS DESECHABLES Y DE PAPEL', 6)
  15. INSERT INTO #temp VALUES ('CUIDADO PERSONAL Y COSMETICOS', 5)
  16. INSERT INTO #temp VALUES ('TODO PARA BEBE', 7)
  17.  
  18. SELECT name FROM #temp WHERE name NOT LIKE '%gift%'
  19. UNION ALL
  20. SELECT name FROM #temp WHERE name LIKE '%gift%'

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 30/08/2012, 02:21
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: ordenamiento de campos

Yo lo haría asi (utilizando el codigo de Libras):
Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. name VARCHAR(50)
  4. )
  5.  
  6. INSERT INTO #temp VALUES ('Giftcards')
  7. INSERT INTO #temp VALUES ('ABARROTES')
  8. INSERT INTO #temp VALUES ('BEBIDAS')
  9. INSERT INTO #temp VALUES ('ARTICULOS DE LIMPIEZA')
  10. INSERT INTO #temp VALUES ('ALIMENTOS Y ACCESORIOS PARA MASCOTAS')
  11. INSERT INTO #temp VALUES ('PRODUCTOS DESECHABLES Y DE PAPEL')
  12. INSERT INTO #temp VALUES ('CUIDADO PERSONAL Y COSMETICOS')
  13. INSERT INTO #temp VALUES ('TODO PARA BEBE')
  14.  
  15. SELECT  *
  16. FROM    #temp
  17. ORDER BY CASE WHEN name='Giftcards' THEN 1 ELSE 0 END,
  18.         name;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: ascendente, ordenamiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:18.