elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  consulta sqlserver con order by dinamico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: consulta sqlserver con order by dinamico  (Leído 5,862 veces)
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
consulta sqlserver con order by dinamico
« en: 12 Octubre 2010, 20:43 pm »

Buenaaaas

Este es mi problema: estoy intentando hacer un procedimiento almacenado en SQL que realice una consulta a la bd. El sp es llamado desde una app en c# al darle click a un botón.

El sp recibe el string @ordenamiento que puede ser 'e.idEmpleado asc', 'e.idEmpleado desc', 'CantidadEmpleados asc' o 'CantidadEmpleados desc'.

Encontré la manera de realizar el ORDER BY dinámico, pero no funciona y creo que es porque esta recibiendo dos expresiones (ej.: e.idEmpleado y asc)

Código
  1. CREATE PROCEDURE consultaCorp4 (
  2. @ordenamiento VARCHAR
  3. )
  4. AS
  5. BEGIN
  6. SET NOCOUNT ON;
  7. SELECT e.idPlanta,COUNT(e.idEmpleado) AS CantidadEmpleados,SUM(dp.MontoBruto) AS SalariosBrutos,avg(dp.MontoBruto) AS SalarioBrutoPromedio
  8. FROM dbo.empleados e INNER JOIN dbo.detalle_planillas dp
  9. ON (e.idEmpleado=dp.idEmpleado)
  10. GROUP BY e.idPlanta
  11. ORDER BY
  12. CASE @ordenamiento
  13. WHEN 'e.idPlanta asc' THEN e.idPlanta ASC
  14. WHEN 'e.idPlanta desc' THEN e.idPlanta DESC
  15. WHEN 'CantidadEmpleados asc' THEN CantidadEmpleados ASC
  16. WHEN 'CantidadEmpleados desc' THEN CantidadEmpleados DESC
  17. END
  18. END
  19. GO
  20.  

De qué manera podría hacer la consulta para que funcione el ORDER BY dinámico?


En línea




d(n n)b
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: consulta sqlserver con order by dinamico
« Respuesta #1 en: 14 Octubre 2010, 14:51 pm »

Qué error te da cuano ejecutas de esa forma?


En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: consulta sqlserver con order by dinamico
« Respuesta #2 en: 14 Octubre 2010, 18:35 pm »

Si mal no recuerdo, intente hacerdlo, pero no me funko y me dio pereza buscar. xD

La cosa es de que, no toma el último argumento,
Código
  1. WHEN 'e.idPlanta asc' THEN e.idPlanta ASC
es decir, esta bien, pero no funciona en la parte de,
Código
  1. [-SNIP-] e.idPlanta ASC
solo toma
Código
  1. [-SNIP-] e.idPlanta [-SNIP-]
En línea

Te vendería mi talento por poder dormir tranquilo.
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
Re: consulta sqlserver con order by dinamico
« Respuesta #3 en: 15 Octubre 2010, 03:39 am »

mm...tengo una solucion que parece ser muy ineficiente, pero creo que sera la solución temporal mientras encuentro manera de hacer lo que quería.

Código
  1. CREATE PROCEDURE [dbo].[consultaCorp4] (
  2. @ordenadoPor INT,
  3. @direccion INT
  4. )
  5. AS
  6. BEGIN
  7. SET NOCOUNT ON;
  8. IF @direccion=0
  9. SELECT e.idPlanta,COUNT(e.idEmpleado) AS CantidadEmpleados,SUM(dp.MontoBruto) AS SalariosBrutos,avg(dp.MontoBruto) AS SalarioBrutoPromedio
  10. FROM dbo.empleados e INNER JOIN dbo.detalle_planillas dp
  11. ON (e.idEmpleado=dp.idEmpleado)
  12. GROUP BY e.idPlanta
  13. ORDER BY CASE @ordenadoPor
  14. WHEN 0 THEN e.idPlanta
  15. WHEN 1 THEN 2--CantidadEmpleados
  16. END
  17. ASC
  18. -- otra opcion
  19. IF @direccion=1
  20. SELECT e.idPlanta,COUNT(e.idEmpleado) AS CantidadEmpleados,SUM(dp.MontoBruto) AS SalariosBrutos,avg(dp.MontoBruto) AS SalarioBrutoPromedio
  21. FROM dbo.empleados e INNER JOIN dbo.detalle_planillas dp
  22. ON (e.idEmpleado=dp.idEmpleado)
  23. GROUP BY e.idPlanta
  24. ORDER BY CASE @ordenadoPor
  25. WHEN 0 THEN e.idPlanta
  26. WHEN 1 THEN 2--CantidadEmpleados
  27. END
  28. DESC
  29. END
  30.  
  31. GO
  32.  

Sip, como dijo Shell Root, en el case solo se toma el primer argumento... para realizar lo que quería entonces tengo que hacer esto... en caso de que alguien logre hallar la solución, pueden responder en este tema pq la verdad sí me interesaría saber como hacerlo de una mejor manera XD estoy segura que debe haber una mejor manera que esta.
En línea




d(n n)b
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: consulta sqlserver con order by dinamico
« Respuesta #4 en: 15 Octubre 2010, 05:26 am »

Pero estás ejecutando la misma QUERY, solo que cambia el ordenamiento. Porque no haces un SWITCH para ORDER BY, y otro SWITCH para ASC/DESC
En línea

Te vendería mi talento por poder dormir tranquilo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ORDER BY no me funciona
Desarrollo Web
Ethgar 3 2,309 Último mensaje 19 Febrero 2014, 20:19 pm
por engel lex
Wolfenstein: The New Order se lanzará el 23 de mayo
Noticias
wolfbcn 0 1,259 Último mensaje 19 Febrero 2014, 21:34 pm
por wolfbcn
[Resuelto] Consulta PHP ORDER BY en select
PHP
bgnumis 2 1,980 Último mensaje 14 Diciembre 2014, 21:02 pm
por bgnumis
Consulta SQLSERVER no funciona en JAVA
Java
wilmer30 0 1,480 Último mensaje 6 Enero 2016, 16:15 pm
por wilmer30
problema al iterar consulta para llenar select dinamico
PHP
d91 2 2,760 Último mensaje 27 Septiembre 2016, 15:08 pm
por d91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines