Ir al contenido


Foto

Construir tabla en tiempo de ejecución


  • Por favor identifícate para responder
2 respuestas en este tema

#1 bcp9520

bcp9520

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 26 septiembre 2013 - 12:59

Estimados buenos días.

Tengo el siguiente inconveniente y espero que me puedan dar una mano.

Necesito contruir una tabla en tiempo de ejecución basada en otra tabla fisica que contiene información por mes, en la tabla fisica puedo tener información de algunos meses por ejemplo de enero a abril pero necesito que en la tabla final se cree 8 filas mas con los 8 meses restantes con saldo cero... Todo esto en SQL server 2008. He intentado con algun cursor y no logro decirle que despues del mes leido me siga agregardo los que faltan. Espero que me haya explicado.

desde ya les agradezco alguna idea de como hacerlo.

saludos y gracias.

  • 0

#2 ciskoKID

ciskoKID

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 02 abril 2014 - 09:13

esto te crea una tabla

delphi
  1. create table #tablatemporal (
  2.   articulo varchar(10) ,
  3.   descripcion varchar(40) ,
  4.   ene float null,
  5.   feb float null,
  6.   mar float null,
  7.   abr float null,
  8.   may float null,
  9.   jun float null,
  10.   jul float null,
  11.   ago float null,
  12.   sep float null,
  13.   oct float null,
  14.   nov float null,
  15.   dic float null
  16.   )


y con esto podrias llenarla



delphi
  1. insert into #tablatemporal
  2. select articulo as articulo, descripcion1 as descripcion1, [1],[2],[3], [4], [5],[6], [7], [8], [9], [10], [11], [12] FROM
  3.     (
  4.       select va.periodo, va.Articulo, art.Descripcion1,  va.cantidadneta
  5.       from VentaArt va
  6.       join Art on art.articulo=va.articulo
  7.       where va.Ejercicio=2014
  8.       and va.Periodo in (1,2,3,4)
  9.      
  10.     )  as tbp
  11.     pivot
  12.     (
  13.       sum(cantidadNeta)
  14.       for periodo in ( [1],[2],[3], [4], [5],[6], [7], [8], [9], [10], [11], [12] )
  15.     ) As p



lo mas seguro es que no es lo que necesitas porque solo entedi crear tabla y crear meses , ahi estan
  • 0

#3 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 mensajes
  • LocationCali, Colombia

Escrito 03 abril 2014 - 09:11

Hola

Existe una propiedad muy utilizada que es la multiplicación de tuplas, esto ocurre cuando no se especifica el tipo del join entre las tablas, por lo tanto la respuesta es una combinación de las dos tablas,  si juntas esto con la respuesta de ciskoKID, puedes obtener facilmente lo que necesitas.



delphi
  1. Select *
  2. from tabla1, tabla2



Esta sentencia multiplicará las dos tablas, es decir que para cada tupla de la tabla1, se generarán una combinación por cada tupla de la tabla2.

Ej.



delphi
  1. CREATE TABLE tabla1
  2. (
  3.   codigo character varying(10) NOT NULL,
  4.   nombre character varying(40),
  5.   PRIMARY KEY (codigo)
  6. );
  7.  
  8. INSERT INTO tabla1 values('01','Valor 1');
  9. INSERT INTO tabla1 values('02','Valor 2');
  10.  
  11.  
  12. CREATE TABLE tabla2
  13. (
  14.   codmes character varying(10) NOT NULL,
  15.   nommes character varying(40),
  16.   PRIMARY KEY (codmes)
  17. );
  18.  
  19. INSERT INTO tabla2 values('ENE','ENERO');
  20. INSERT INTO tabla2 values('FEB','FEBRERO');
  21. INSERT INTO tabla2 values('MAR','MARZO');
  22. INSERT INTO tabla2 values('ABR','ABRIL');
  23. INSERT INTO tabla2 values('MAY','MAYO');
  24. INSERT INTO tabla2 values('JUN','JUNIO');
  25. INSERT INTO tabla2 values('JUL','JULIO');
  26. INSERT INTO tabla2 values('AGO','AGOSTO');
  27. INSERT INTO tabla2 values('SEP','SEPTIEMBRE');
  28. INSERT INTO tabla2 values('OCT','OCTUBRE');
  29. INSERT INTO tabla2 values('NOV','NOVIEMBRE');
  30. INSERT INTO tabla2 values('DIC','DICIEMBRE');
  31.  
  32.  
  33. SELECT *
  34. FROM TABLA1, TABLA2
  35.  
  36. codigo;nombre;codmes;nommes
  37. "01";"Valor 1";"ENE";"ENERO"
  38. "01";"Valor 1";"FEB";"FEBRERO"
  39. "01";"Valor 1";"MAR";"MARZO"
  40. "01";"Valor 1";"ABR";"ABRIL"
  41. "01";"Valor 1";"MAY";"MAYO"
  42. "01";"Valor 1";"JUN";"JUNIO"
  43. "01";"Valor 1";"JUL";"JULIO"
  44. "01";"Valor 1";"AGO";"AGOSTO"
  45. "01";"Valor 1";"SEP";"SEPTIEMBRE"
  46. "01";"Valor 1";"OCT";"OCTUBRE"
  47. "01";"Valor 1";"NOV";"NOVIEMBRE"
  48. "01";"Valor 1";"DIC";"DICIEMBRE"
  49. "02";"Valor 2";"ENE";"ENERO"
  50. "02";"Valor 2";"FEB";"FEBRERO"
  51. "02";"Valor 2";"MAR";"MARZO"
  52. "02";"Valor 2";"ABR";"ABRIL"
  53. "02";"Valor 2";"MAY";"MAYO"
  54. "02";"Valor 2";"JUN";"JUNIO"
  55. "02";"Valor 2";"JUL";"JULIO"
  56. "02";"Valor 2";"AGO";"AGOSTO"
  57. "02";"Valor 2";"SEP";"SEPTIEMBRE"
  58. "02";"Valor 2";"OCT";"OCTUBRE"
  59. "02";"Valor 2";"NOV";"NOVIEMBRE"
  60. "02";"Valor 2";"DIC";"DICIEMBRE"




Saludos

  • 0




IP.Board spam blocked by CleanTalk.