1. ホーム
  2. sql

[解決済み】2つのSELECT文の結果をJOINする。

2022-04-04 17:19:54

質問

2つのSQLの結果を結合することは可能ですか? SELECT ステートメントを1つのステートメントにまとめることができますか? 私はタスクのデータベースを持っていて、各レコードは別々のタスクで、締切があります(と 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 )

tempテーブルを使わないようにしているのですが、それしか現実的な方法がないのであれば、このような形でtempテーブルを使うことについて詳しく教えていただきたいです。

のようなものもやってみた。 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つのselect文も動作します。 LEFT JOIN を結合する方法も理解できましたし、複数の select このように

解決方法は?

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