varias tablas relacionadas multitablas inner ejemplos datos consultas consultar consulta complejas sql union

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.