Repite el número de fila con join.
Estoy tratando de obtener el número de fila para cada ID incremental por correo electrónico de cliente.
TABLA DE PEDIDOS DE STAGE_MAGENTO:
CORREO_ELECTRÓNICO_CLIENTE | ID_INCREMENTAL | ID_ENTIDAD |
---|---|---|
123@gmail.com | 1232 | 24323 |
123@gmail.com | 1258 | 25343 |
TABLA DE LÍNEAS DE PEDIDOS DE STAGE_MAGENTO:
NOMBRE_DEL_PRODUCTO | ID_PEDIDO |
---|---|
Apple | 24323 |
Banana | 24323 |
Pear | 25343 |
Resultado deseado (El NÚMERO_DE_PEDIDO es el mismo para cada ID_INCREMENTAL):
| CORREO_ELECTRÓNICO_CLIENTE | ID_INCREMENTAL | ID_ENTIDAD | NOMBRE_DEL_PRODUCTO | NUMERO_DE_PEDIDO |
|---------------------------|----------------|------------|--------------------|-----------------|
| 123@gmail.com | 1232 | 24323 | Apple | 1 |
| 123@gmail.com | 1232 | 24323 | Banana | 1 |
| 123@gmail.com | 1258 | 25343 | Pear | 2 |
Resultado obtenido al intentar lo siguiente (como se puede ver, el NUMERO_DE_PEDIDO ha incrementado cuando no debería):
| CORREO_ELECTRÓNICO_CLIENTE | ID_INCREMENTAL | ID_ENTIDAD | NOMBRE_DEL_PRODUCTO | NUMERO_DE_PEDIDO |
|---------------------------|----------------|------------|--------------------|-----------------|
| 123@gmail.com | 1232 | 24323 | Apple | 1 |
| 123@gmail.com | 1232 | 24323 | Banana | 2 |
| 123@gmail.com | 1258 | 25343 | Pear | 3 |
Código intentado:
SELECT
o.CORREO_ELECTRÓNICO_CLIENTE
, O.ID_INCREMENTAL
, l.NOMBRE_DEL_PRODUCTO
, ROW_NUMBER() OVER(PARTITION BY LOWER(o.correo_electrónico_cliente) ORDER BY o.CREACION) AS NUMERO_DE_PEDIDO
, o.TOTAL_GENERAL_BASE - o.COSTO_ENVIO_BASE - o.TOTAL_IMPUESTOS_BASE AS VENTA_NETA
FROM PEDIDO_MAGENTO_STAGE o
INNER JOIN LINEAPEDIDOS_MAGENTO_STAGE l
ON l.ID_PEDIDO = o.ID_ENTIDAD
¿Realmente necesito cambiarlo para que sea así? (pensé que no era bueno hacer declaraciones SELECT anidadas):
SELECT
o.CORREO_ELECTRÓNICO_CLIENTE
, O.ID_INCREMENTAL
, l.NOMBRE_DEL_PRODUCTO
, o.NUMERO_DE_PEDIDO
, o.TOTAL_GENERAL_BASE - o.COSTO_ENVIO_BASE - o.TOTAL_IMPUESTOS_BASE AS VENTA_NETA
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY LOWER(correo_electrónico_cliente) ORDER BY CREACION) AS NUMERO_DE_PEDIDO FROM PEDIDO_MAGENTO_STAGE) o
INNER JOIN LINEAPEDIDOS_MAGENTO_STAGE l
ON l.ID_PEDIDO = o.ID_ENTIDAD
davy.ai
Para obtener el resultado deseado de tener el mismo número de pedido para cada incremento de ID por correo electrónico del cliente, es necesario utilizar una declaración SELECT anidada con la función ROW_NUMBER(). Aquí está la consulta correcta que te dará el resultado deseado:
Como puedes ver, la declaración SELECT anidada ahora incluye tanto el correo electrónico del cliente como el incremento de ID en la cláusula PARTITION BY de la función ROW_NUMBER(). Esto asegurará que el número de pedido se reinicie para cada combinación única de correo electrónico del cliente e incremento de ID.
No necesariamente tienes que utilizar declaraciones SELECT anidadas, pero en este caso es el enfoque más adecuado para obtener el resultado deseado.