Ayuda de consulta en bucle!Hola a todos,
Estoy luchando con una consulta y necesito tu ayuda!
Estoy tratando de convertir esto:
| Padre | Componente |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 5 | 6 |
| 6 | 7 |
Dentro de esto:
| Padre | Componente |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 1 | 7 |
Aquí está el código que tengo hasta ahora, pero no puedo hacerlo funcionar.
Snums = Abrir base de datos (
"DSN =" cadena de conexión ... " ,
"SELECCIONE [dbo]. [BOM]. [PARENT] como PARENTID, [dbo]. [BOM]. [COMPONENT] as SUBPARENTID
DE [dbo]. [BOM] --as tb1
--LEFT JOIN [dbo]. [BOM] ON [dbo]. [BOM]. [PARENT] = [dbo]. [BOM]. [COMPONENT] "
);
Snums << Nueva Columna ( "SUBPARENTID2" , Personaje );
por (i = 1 , i <= N filas (Snums), i ++,
r = Snums << Obtener filas donde (: PARENTID ==: SUBPARENTID [i]);
Si (
N filas (r) == 0 , Continuar ()
N filas (r) == 1 & r [ 1 ] == i,: SUBPARENTID2 [i] = 0 ,
N filas (r) == 1 ,: SUBPARENTID2 [i] =: SUBPARENTID [r [ 1 ]],
: SUBPARENTID2 [i] =: SUBPARENTID2 [i]
););
Estoy tratando de aprender el código JMP lo más rápido posible (nuevo trabajo) pero tengo un plazo muy corto con este. ¡Por favor ayuda!
);
);
Re: Ayuda de consulta en bucle! @ Minutemaid23 ,
Aquí esto funciona para el ejemplo que proporcionaste. Creo que esto funciona en gran medida y la única complicación que puedo ver es si la lista original de padre y componente tenía una relación de muchos a muchos en lugar de uno a uno.
Clear Log(); Clear Globals();
// Get Reference for data table
dt = Current Data Table();
// Extract Values from Parent and Component and wrap them in associative arrays
ParentVals = Associative Array(dt:Parent << Get Values) ;
ComponentVals = Associative Array(dt:Component << Get Values);
// Find Common elements between Parents and Components
Intersection = ParentVals;
Intersection << Intersect(ComponentVals);
Common = Intersection << Get Keys;
// Update Data Table
dt << Begin Data Update;
for(i = 1, i <= N Items(Common), i++,
SR1 = dt << Select Where(:Parent == Common[i]) << Get Selected Rows;
dt << Clear Select;
SR2 = dt << Select Where(:Component == Common[i]) << Get Selected Rows;
NewParent = dt:Parent[SR2];
dt << Clear Select;
dt << Add Rows(1);
nR = nRows(dt);
dt:Parent[nR] = NewParent;
dt:Component[nR] = Common[i];
);
dt << End Data Update;
// Remove Duplicates
dt_res = dt << Summary(
Group( :Parent, :Component ),
Freq( "None" ),
Weight( "None" )
);
Re: Ayuda de consulta en bucle!La mejor descripción que puedo proporcionar está abajo. Como 5 es un componente debajo de 1, y 6 es un componente de 5, entonces 5 y 6 son menores que 1.
Gira esto:
| Padre | Componente |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 5 | 6 |
| 6 | 7 |
dentro de esto:
| Padre | Componente |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 1 | 7 |
Re: Ayuda de consulta en bucle! @ Minutemaid23 ,
Por lo que entendí, aquí es donde voy.
Clear Log(); Clear Globals();
// Get Reference for data table
dt = Current Data Table();
// Extract Values from Parent and Component and wrap them in associative arrays
ParentVals = Associative Array(dt:Parent << Get Values) ;
ComponentVals = Associative Array(dt:Component << Get Values);
// Find Common elements between Parents and Components
Intersection = ParentVals;
Intersection << Intersect(ComponentVals);
Common = Intersection << Get Keys;
La idea por la que estoy pasando es:
Paso 1: Para que pueda recuperar estos elementos, primero deberá identificar cuáles son los elementos comunes, es decir, qué elementos existen como Componente y Padre
Paso 2: Una vez que conozca los elementos comunes, no sé qué quiere decir con traerlos de nuevo, si pudiera ayudarme a entender un poco mejor, de lo contrario, esto debería al menos comenzar en la dirección correcta
Re: Ayuda de consulta en bucle!Haré mi mejor esfuerzo.
Me estoy conectando a través de ODBC a una tabla que tiene dos columnas, principal y componente. En la tabla, es posible que un componente también esté en la columna principal. Por ejemplo, el número 5 es un componente y un padre. Estoy tratando de escribir el código que parece si un componente está en la columna principal. Si es así, quiero recuperar el valor de ese componente (6 en este ejemplo). Luego estoy intentando que compruebe si 6 está en la tabla principal, y así sucesivamente.
| Padre | Componente |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 5 | 6 |
| 6 | 7 |
Re: Ayuda de consulta en bucle! @ Minutemaid23 ,
¿Puedes ayudarme a entender lo que estás tratando de hacer? No puedo seguir lo que son las tablas 1 y 2. Ayudará a la comunidad en general y a usted mismo si la pregunta fuera más clara, para que las personas puedan intentar ayudarlo.