Combinar pedidos actuales e históricos
Situación
Los pedidos recientes permanecen en Pedido y PedidoDetalle; los antiguos fueron resumidos en PedidoHistorico. Queremos una cronología única sin ocultar de dónde procede cada fila.
Primera aproximación
UNION podría combinar los resultados, pero además intentaría eliminar duplicados. Como cada pedido pertenece a una fuente conocida y queremos conservar todas las filas, utilizaremos UNION ALL.
Los pedidos actuales todavía tienen varias partidas. Una CTE —la consulta con nombre que comienza mediante WITH— permitirá resumirlas primero con SUM y utilizar después ese resultado como si fuera una tabla dentro de la misma instrucción.
Consulta final
WITH PedidosActuales AS
(
SELECT
pe.IdPedido,
pe.IdCliente,
pe.FechaPedido,
pe.Estado,
SUM
(
d.Cantidad * d.PrecioUnitario
* (1 - d.Descuento / 100.0)
) AS Total
FROM dbo.Pedido AS pe
INNER JOIN dbo.PedidoDetalle AS d
ON d.IdPedido = pe.IdPedido
GROUP BY
pe.IdPedido,
pe.IdCliente,
pe.FechaPedido,
pe.Estado
)
SELECT
a.IdPedido,
a.IdCliente,
a.FechaPedido,
a.Estado,
a.Total,
'Actual' AS Origen
FROM PedidosActuales AS a
UNION ALL
SELECT
h.IdPedidoOriginal AS IdPedido,
h.IdCliente,
h.FechaPedido,
h.Estado,
h.Total,
'Histórico' AS Origen
FROM dbo.PedidoHistorico AS h
ORDER BY
FechaPedido DESC,
IdPedido DESC,
Origen;
Recorrido
La CTE calcula primero el total actual a partir de sus partidas. La consulta histórica ya contiene una fila resumida por pedido, por lo que no necesita agrupar.
Ambos lados devuelven seis columnas compatibles y en el mismo orden. La columna calculada Origen conserva trazabilidad —la posibilidad de reconocer de dónde procede cada fila— y ayuda a interpretar identificadores que provienen de espacios distintos.
El ORDER BY aparece una sola vez al final y organiza el conjunto combinado. Origen actúa como último desempate cuando dos fuentes contienen el mismo identificador y fecha.
Resultado esperado
Las primeras filas de marzo provienen de Actual; después aparecen pedidos de 2025 con origen Histórico. Ninguna fila se elimina por parecerse a otra.
| IdPedido | FechaPedido | Total | Origen |
|---|---|---|---|
| 5 | 2026-03-05 08:50 | 624.15 | Actual |
| 2 | 2026-03-04 17:20 | 719.10 | Actual |
| 9003 | 2025-10-22 18:45 | 219.00 | Histórico |
Comprobación en SSMS
La cronología reúne ambos orígenes y mantiene la etiqueta que permite distinguir cada fila.

Variación: filtrar después de combinar
Si necesitamos aplicar un mismo filtro a ambos orígenes, envolvemos el UNION ALL en una CTE adicional y filtramos una vez. Esto evita mantener condiciones equivalentes en dos lugares.
Límite o precaución
Compatibilidad de tipos no significa igualdad de significado. Confirmamos moneda, reglas de descuento, precisión, zona horaria y significado de los estados en ambos periodos.
También comprobamos si los identificadores históricos pueden coincidir con los actuales. La columna Origen puede formar parte de la llave lógica del resultado, el conjunto de valores que distingue cada entidad dentro de esta combinación.
UNION ALL conserva incluso una fila que haya quedado por error tanto en la tabla actual como en la histórica. Antes de combinar definimos el punto de corte entre ambas fuentes y comprobamos que no exista traslape; la etiqueta Origen permite detectar y explicar esas coincidencias, pero no las corrige.