236

SELECT2 つの SQLステートメントの結果を 1 つのステートメントに結合することは可能ですか? 各レコードが期限付きの個別のタスクであるタスクのデータベースがあります (開始から期限までの日数 で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

selectそして、これら 2 つのステートメントの結果を結合したいと思います(によってKS)

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

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

補遺: 申し訳ありませんが、結果にKSTasks、およびの列が必要です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 ステートメントも機能し、 a を使用してそれらを結合することもできます。この方法で複数の sLEFT JOINを結合する方法がわかりました。select

4

5 に答える 5

355
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);
于 2012-05-10T16:40:20.333 に答える
105

次のようなことを試してください:

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
于 2012-05-10T16:40:35.943 に答える
59

使用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

またはUNION ALL、複製が必要な場合:

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
于 2012-05-10T16:40:48.077 に答える
19

Age と Palt が同じテーブルの列である場合、次のようにすべてのタスクをカウント (*) し、遅いタスクのみを合計できます。

select ks,
       count(*) tasks,
       sum(case when Age > Palt then 1 end) late
  from Table
 group by ks
于 2012-05-10T16:42:35.083 に答える
17

UNION ALLこれにはキーワードを使用できます。

T-SQL http://msdn.microsoft.com/en-us/library/ms180026.aspxでそれを行うための MSDN ドキュメントは次のとおりです。

UNION ALL - 結果セットを結合します

UNION - Set Union のようなことを行い、重複する値を出力しません

例との違い: http://sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html

于 2012-05-10T16:38:49.420 に答える