ÚNASE a dos resultados de statement SELECT

¿Es posible unir los resultados de 2 sentencias SQL SELECT en una statement? Tengo una database de tareas donde cada logging es una tarea separada, con dates límites (y un PALT, que es solo un INT de días desde el inicio hasta la date límite. La edad también es un número INT de días).

Quiero tener una tabla que tenga a cada persona en la table, el número de tareas que tienen y el número de tareas TARDÍAS que tienen (si las hay).

Puedo get estos datos en tablas separadas fácilmente, así:

SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks 

devolver datos como:

 ks # Tasks person1 7 person2 3 

y luego tengo

 SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks 

que devuelve:

 ks # Late person1 1 person2 1 

Y quiero unirme a los resultados de estas dos declaraciones seleccionadas (por el KS)

Estoy tratando de evitar el uso de una tabla temporal, pero si esa es la única forma práctica de hacerlo, me gustaría saber más sobre el uso de tablas temporales de esta manera.

También traté de hacer algún tipo de conteo () # de filas que satisfagan un condicional, pero tampoco pude encontrar la manera de hacerlo. Si es posible, eso también funcionaría.

Adición: Lo siento, quiero que mis resultados tengan columnas para KS, Tareas y Último

 KS # Tasks # Late person1 7 1 person2 3 1 person3 2 0 (or null) 

Además, quiero que aparezca una persona incluso si no tiene tareas atrasadas.

SUM (CASO CUANDO Edad> Palt THEN 1 ELSE 0 END) ¡Tarde funciona bien, gracias por esta respuesta!

Dos sentencias select también funcionan, usar un LEFT JOIN para unirlas también funciona, y ahora entiendo cómo unir múltiples selects de esta manera. ¡Gracias!

 select t1.ks, t1.[# Tasks], coalesce(t2.[# Late], 0) as [# Late] from (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1 left join (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2 on t1.ks = t2.ks 

Pruebe algo como esto:

 SELECT * FROM (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1 INNER JOIN (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2 ON t1.ks = t2.ks 

Use UNION :

 SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks UNION SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks 

O UNION ALL si quieres duplicates:

 SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks UNION ALL SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks 

Si Age y Palt son columnas en la misma tabla, puede contar (*) todas las tareas y sumr solo las últimas como esta:

 select ks, count(*) tasks, sum(case when Age > Palt then 1 end) late from Table group by ks 

puede usar la palabra key UNION ALL para esto.

Aquí está el documento de MSDN para hacerlo en T-SQL http://msdn.microsoft.com/en-us/library/ms180026.aspx

UNION ALL: combina el set de resultados

UNION- Hace algo como un Set Union y no da salida a valores duplicates

Para la diferencia con un ejemplo: http://sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html