2 つの SQL ステートメントの結果を 1 つのステートメントに結合することは可能ですかSELECT
? タスクのデータベースがあり、各レコードは期限 (および開始から期限までの日数PALT
を表す )を持つ個別のタスクです。も日数です。INT
Age
INT
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つの声明の結果を結合したいselect
(KS
)
私は一時テーブルの使用を避けようとしていますが、それがこれを行う唯一の実用的な方法である場合、この方法で一時テーブルを使用する方法について詳しく知りたいと思います。
また、条件を満たす行をいくつか作成しようとしましたcount()
が、その方法もわかりませんでした。可能であれば、それも機能するでしょう。
補足: 申し訳ありませんが、結果にはKS
、、、の列を表示したいのですTasks
がLate
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);