SQL - cómo insertar datos en una tabla dependiendo de los campos en otra tabla

   
Vista:

cómo insertar datos en una tabla dependiendo de los campos en otra tabla

Publicado por isak (2 intervenciones) el 29/05/2012 02:15:14
Hola necesito de su ayuda, tengo una tabla de articulos "tabla1".
tiene algunos campos como PreMon1, PreMon2, PreMon7.

PreMon indica la lista de precios y puede haber listas de precios que van desde 1 hasta 7.
hay ocasiones que la tabla1 puede tener una o mas listas de precios
para el ejemplo puse 3 listas de precios, que son: PreMon1, PreMon2, PreMon7
y dos articulos que son "001012" y "002014"

la estructura de la tabla1 es la sig:


TABLA1

ArtCod___ AlmCod___ PreFch__ PreMon1 __PreMon2 __ PreMon7

001012_____19____10/05/2012__2.46_______3.2________3.5
002014_____19____10/05/2012__15.23_____16.0_______15.5

Lo que quiero hacer es llenar la tabla2 con la informacion de la tabla1, principalmente quiero llenar el campo "PreClaSubFam" que viene en la tabla2.
Dependiendo de que lista de precios tenga la tabla1 se determinará los datos para el campo "PreClaSubFam" de la tabla2.
Ejemplo si en la tabla1 viene la lista de precios1 osea PreMon1 entonces en el campo PreClaSubFam de la tabla2 poner 1; si en la tabla1 viene la lista de precios2 osea PreMon2 entonces en el campo PreClaSubFam de la tabla2 poner 2 asi sucesivamente
quiero que quede algo asi como esto:


TABLA2

ArtCod___ AlmCod___ PreFch_______ PreMon__PreClaSubFam
001012_____19____10/05/2012_______2.46________1
001012_____19____10/05/2012_______3.2_________2
001012_____19____10/05/2012_______3.3_________7
002014_____19____10/05/2012______15.23________1
002014_____19____10/05/2012______16.0_________2
002014_____19____10/05/2012______15.5_________7


Qué podría hacer en este caso, cual seria la mejor opcion para realizarlo, necesito alguna orientacion se los agradeceria mucho espero pronto alguna respuesta. saludos !!
Nota: utilizo SQL SERVER R2 2008
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

cómo insertar datos en una tabla dependiendo de los campos en otra tabla

Publicado por leonardo_josue (878 intervenciones) el 29/05/2012 21:01:04
Hola Isak....

No me quedó claro si físicamente tienes dos tablas y necesitas insertar los datos en tabla2 a partir de los datos de la tabla1 o simplemente necesitas una consulta que te presente en una estructura como la tabla 2.

Lo que quieres hacer se puede realizar con UNION... en el equipo en que estoy trabajando no tengo instalado SQL Server, pero te dejo el ejemplo de cómo sería en MySQL... la sintaxis debe ser lo mismo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mysql> SELECT * FROM tabla;
+--------+--------+------------+---------+---------+---------+
| ArtCod | AlmCod | PreFch     | PreMon1 | PreMon2 | PreMon7 |
+--------+--------+------------+---------+---------+---------+
| 001012 |     19 | 2012-05-10 |    2.46 |    3.20 |    3.50 |
| 002014 |     19 | 2012-05-10 |   15.23 |   16.00 |   15.50 |
+--------+--------+------------+---------+---------+---------+
2 rows in set (0.00 sec)
 
mysql> SELECT ArtCod, AlmCod, PreFch, PreMon1, 1 PreClaSubFam FROM tabla
    -> UNION
    -> SELECT ArtCod, AlmCod, PreFch, PreMon2, 2 PreClaSubFam FROM tabla
    -> UNION
    -> SELECT ArtCod, AlmCod, PreFch, PreMon7, 7 PreClaSubFam FROM tabla
    -> ORDER BY 1, 5;
+--------+--------+------------+---------+--------------+
| ArtCod | AlmCod | PreFch     | PreMon1 | PreClaSubFam |
+--------+--------+------------+---------+--------------+
| 001012 |     19 | 2012-05-10 |    2.46 |            1 |
| 001012 |     19 | 2012-05-10 |    3.20 |            2 |
| 001012 |     19 | 2012-05-10 |    3.50 |            7 |
| 002014 |     19 | 2012-05-10 |   15.23 |            1 |
| 002014 |     19 | 2012-05-10 |   16.00 |            2 |
| 002014 |     19 | 2012-05-10 |   15.50 |            7 |
+--------+--------+------------+---------+--------------+
6 rows in set (0.00 sec)


Observa que el campo PreClaSubFam se asigna de manera directa y lo que varía es el campo de donde extraes el precio.

Dale un vistazo para ver si es lo que necesitas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

cómo insertar <a in_rurl=

Publicado por isak movi89@live.com (2 intervenciones) el 30/05/2012 01:43:13
Primeramente gracias Leo por tu aporte, ya me diste una idea de como llenar la tabla2. En cuanto a tu duda, las 2 tablas las tengos fisicamente.

Pero me falto decir algo, otro punto muy importante sobre la tabla donde extraigo los datos en este caso de la "tabla1"
su estructura cambia, me refiero a la listas de precios que son los campos PreMon1, PreMon2, PreMon3,PreMon4,PreMon5,PreMon6 y PreMon7

por ejemplo: hay ocasiones que la tabla1 tiene una sola lista de precios y su estructura sería:

| ArtCod | AlmCod | PreFch | PreMon1 |

o puede tener dos listas de precios y la estructura sería asi:

| ArtCod | AlmCod | PreFch | PreMon5 | PreMon2

o puede terner mas de dos listas de precios un ejemplo seria:

| ArtCod | AlmCod | PreFch | PreMon7 | PreMon3 | PreMon6 | PreMon4

cómo podría saber que listas de precios contiene la tabla1? teniendo en cuenta que puede cambiar la estructura de la tabla1 osea que puede haber una lista de precios o mas de una, cómo determinar eso?
una vez conociendo esa parte podré llenar el campo "PreClaSubFam" de la tabla2

espero haberme explicado, preguntame si todavia no te quedo claro saludos !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

cómo insertar datos en una tabla dependiendo de los campos en otra tabla

Publicado por leonardo_josue (878 intervenciones) el 30/05/2012 19:06:29
Hola de nuevo Isak:

A ver me quedaron más dudas que respuestas con tu último post.

¿Cómo es eso de que la estructura de tu tabla cambia?... es decir, me parece una barbaridad que puedas estar alterando la estructura física de tus tablas por un mal modelo de BD... para poder parametrizar un escenario así tendrías que recurrir a las tablas catálogo de tu BD, para recuperar los metadatos de tu tabla y saber cuántos campos tiene físicamente... Repito que eso es una barbaridad.

¿¿¿Te refieres a caso a la información que pueda estar contenida en la tabla??? es decir, entiendo que tu tabla no cambie físicamente, pero que no todos los registros se llenen... es decir que puedas tener productos sólo con información para la primer lista de precios, para dos o para todas las listas de precios... si es así la consulta que puse debería servir, sólo agregando una condición que especifique que el campo no puede ser nulo... es decir, esperaría que tuvieras algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> SELECT * FROM tabla;
+--------+--------+------------+---------+---------+---------+
| ArtCod | AlmCod | PreFch     | PreMon1 | PreMon2 | PreMon7 |
+--------+--------+------------+---------+---------+---------+
| 001012 |     19 | 2012-05-10 |    2.46 |    NULL |    NULL |
| 002014 |     19 | 2012-05-10 |   15.23 |   16.00 |   15.50 |
| 005076 |     19 | 2012-05-10 |   12.12 |   25.12 |    NULL |
+--------+--------+------------+---------+---------+---------+
3 rows in set (0.00 sec)
 
mysql> SELECT ArtCod, AlmCod, PreFch, PreMon1, 1 PreClaSubFam
    -> FROM tabla WHERE PreMon1 IS NOT NULL
    -> UNION
    -> SELECT ArtCod, AlmCod, PreFch, PreMon2, 2 PreClaSubFam
    -> FROM tabla WHERE PreMon2 IS NOT NULL
    -> UNION
    -> SELECT ArtCod, AlmCod, PreFch, PreMon7, 7 PreClaSubFam
    -> FROM tabla WHERE PreMon7 IS NOT NULL
    -> ORDER BY 1, 5;
+--------+--------+------------+---------+--------------+
| ArtCod | AlmCod | PreFch     | PreMon1 | PreClaSubFam |
+--------+--------+------------+---------+--------------+
| 001012 |     19 | 2012-05-10 |    2.46 |            1 |
| 002014 |     19 | 2012-05-10 |   15.23 |            1 |
| 002014 |     19 | 2012-05-10 |   16.00 |            2 |
| 002014 |     19 | 2012-05-10 |   15.50 |            7 |
| 005076 |     19 | 2012-05-10 |   12.12 |            1 |
| 005076 |     19 | 2012-05-10 |   25.12 |            2 |
+--------+--------+------------+---------+--------------+
6 rows in set (0.00 sec)


Trata de explicar nuevamente tu problema, para poderte brindar la mejor opción para resolverlo.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar