sql - relacionadas - Combina dos tablas para una salida
inner join varias tablas (3)
¿Podemos llevar esto un paso más allá y decir que solo quiero ver filas combinadas que tengan 50 horas o más? Lo he intentado, pero aparece un error que no puede encontrar SumHours ...
Select ChargeNum, CategoryId, Sum(Hours) As SumHours
From (
Select ChargeNum, CategoryId, Hours
From KnownHours
Union
Select ChargeNum, ''Unknown'' As CategoryId, Hours
From UnknownHours
) As a
WHERE (SumHours>=50)
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId
Así que lo intenté
Select ChargeNum, CategoryId, Sum(Hours) As SumHours
From (
Select ChargeNum, CategoryId, Hours
From KnownHours
Union
Select ChargeNum, ''Unknown'' As CategoryId, Hours
From UnknownHours
) As a
WHERE (Hours>=50)
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId
Pero esto no da la suma de las horas en ambas mesas ...
Digamos que tengo dos mesas:
ConocidosHours:
ChargeNum CategoryID Month Hours 111111 1 2/1/09 10 111111 1 3/1/09 30 111111 1 4/1/09 50 222222 1 3/1/09 40 111111 2 4/1/09 50
Horas desconocidas:
ChargeNum Month Hours 111111 2/1/09 70 111111 3/1/09 40.5 222222 7/1/09 25.5
Necesito agrupar estas horas, ignorando Mes, en una sola tabla de datos para que mi resultado esperado sea el siguiente:
ChargeNum CategoryID Hours 111111 1 90 111111 2 50 111111 Unknown 110.5 222222 1 40 222222 Unknown 25.5
Parece que no puedo resolver esto. Cualquier ayuda sería muy apreciada!
EDITAR: Necesito sumar las horas para cada combinación ChargeNum / Categoría. Actualicé los datos de muestra para reflejar esto.
En la salida esperada, tienes la segunda suma de la última fila incorrecta, debería ser 40 según los datos de tus tablas, pero aquí está la consulta:
Select ChargeNum, CategoryId, Sum(Hours)
From (
Select ChargeNum, CategoryId, Hours
From KnownHours
Union
Select ChargeNum, ''Unknown'' As CategoryId, Hours
From UnknownHours
) As a
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId
Y aquí está la salida:
ChargeNum CategoryId
---------- ---------- ----------------------
111111 1 40
111111 2 50
111111 Unknown 70
222222 1 40
222222 Unknown 25.5
Deberá usar UNION
para combinar los resultados de dos consultas. En tu caso:
SELECT ChargeNum, CategoryID, SUM(Hours)
FROM KnownHours
GROUP BY ChargeNum, CategoryID
UNION ALL
SELECT ChargeNum, ''Unknown'' AS CategoryID, SUM(Hours)
FROM UnknownHours
GROUP BY ChargeNum
Nota: si usa UNION ALL
como en el ejemplo anterior, no es más lento que ejecutar las dos consultas por separado, ya que no realiza la verificación de duplicados.