Est-il possible de joindre les résultats de 2 SELECT
instructions SQL en une seule instruction? J'ai une base de données de tâches où chaque enregistrement est une tâche distincte, avec des délais (et un PALT
, qui est juste un INT
jour du début à la date limite. Age
Est également un INT
nombre de jours.)
Je veux avoir un tableau qui a chaque personne dans le tableau, le nombre de tâches qu'ils ont et le nombre de LATE
tâches qu'ils ont (le cas échéant).
Je peux facilement obtenir ces données dans des tableaux séparés, comme ceci:
SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
renvoyer des données comme:
ks # Tasks
person1 7
person2 3
et puis j'ai:
SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
qui renvoie:
ks # Late
person1 1
person2 1
Et je veux joindre les résultats de ces deux select
déclarations (par le KS
)
J'essaie d'éviter d'utiliser une table temporaire, mais si c'est le seul moyen pratique de le faire, j'aimerais en savoir plus sur l'utilisation des tables temporaires de cette manière.
J'ai également essayé de créer une sorte de count()
lignes qui satisfassent un conditionnel, mais je ne savais pas non plus comment le faire. Si c'est possible, cela fonctionnerait aussi.
Addendum: Désolé, je veux que mes résultats ont des colonnes pour KS
, Tasks
etLate
KS # Tasks # Late
person1 7 1
person2 3 1
person3 2 0 (or null)
De plus, je veux qu'une personne se présente même si elle n'a pas de tâches en retard.
SUM(CASE WHEN Age > Palt THEN 1 ELSE 0 END) Late
fonctionne bien, merci pour cette réponse!
Deux instructions select fonctionnent également, l'utilisation de a LEFT JOIN
pour les joindre fonctionne également, et je comprends maintenant comment joindre plusieurs select
s de cette manière
Réponses:
la source
Essayez quelque chose comme ceci:
la source
Utilisez
UNION
:Ou
UNION ALL
si vous voulez des doublons:la source
Si Age et Palt sont des colonnes dans le même tableau, vous pouvez compter (*) toutes les tâches et ne additionner que les dernières comme ceci:
la source
vous pouvez utiliser le
UNION ALL
mot - clé pour cela.Voici le document MSDN pour le faire dans T-SQL http://msdn.microsoft.com/en-us/library/ms180026.aspx
UNION ALL - combine l'ensemble de résultats
UNION - Fait quelque chose comme une union d'ensemble et ne produit pas de valeurs en double
Pour la différence avec un exemple: http://sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html
la source