2つのSELECT文の結果を結合する 質問する

2つのSELECT文の結果を結合する 質問する

2 つの SQL ステートメントの結果を 1 つのステートメントに結合することは可能ですかSELECT? タスクのデータベースがあり、各レコードは期限 (および開始から期限までの日数PALTを表す )を持つ個別のタスクです。も日数です。INTAgeINT

LATE各人、その人が持っているタスクの数、その人が持っているタスクの数(ある場合)を示すテーブルが必要です。

次のように、このデータを別々のテーブルに簡単に取得できます。

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

次のようなデータを返します:

ks        # Tasks
person1   7
person2   3

そして私はこう言います:

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

結果は次のようになります:

ks        # Late
person1   1
person2   1

そして、私はこれら2つの声明の結果を結合したいselectKS

私は一時テーブルの使用を避けようとしていますが、それがこれを行う唯一の実用的な方法である場合、この方法で一時テーブルを使用する方法について詳しく知りたいと思います。

また、条件を満たす行をいくつか作成しようとしましたcount()が、その方法もわかりませんでした。可能であれば、それも機能するでしょう。

補足: 申し訳ありませんが、結果にはKS、、、の列を表示したいのですTasksLate

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

さらに、遅れているタスクがない場合でも、出社してもらいたいです。

SUM(CASE WHEN Age > Palt THEN 1 ELSE 0 END) Late
うまくいきました。この回答に感謝します!

2つの選択ステートメントも機能し、を使用してそれらを結合することもできます。この方法でLEFT JOIN複数のを結合する方法がわかりました。select

ベストアンサー1

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);

おすすめ記事