これは、1つのアプローチであるが、私はそれが最も効率的だとは思いません。
最初に、データの中に仕上げの週があるか、またはその逆になることがあるので、すべての週のセットが必要です。
次に、クエリを使用して週ごとの値の数を選択するだけです。
SELECT A.week
, (SELECT count(1) FROM table B WHERE B.StartWk = A.Week) as Started
, (SELECT count(1) FROM table C WHERE C.FinishWk= A.Week) as Finished
FROM (SELECT startWk as Week FROM Table WHERE startWk is not null UNION
SELECT FinishWk as Week FROM Table WHERE FinishWk is not null
) A
ではなく組み合わせ週間で毎週2つのクエリを実行するので週ごとに一度カウントを取得することができますので、これはおそらく、より効率的です。あなたのDBMSは、ANSI準拠している場合
SELECT A.Week, B.Started, C.Finished
FROM (SELECT startWk as Week FROM Table WHERE startWk is not null UNION
SELECT FinishWk as Week FROM Table WHERE FinishWk is not null) A
LEFT JOIN (SELECT startWk, count(1) Started
FROM TABLE
GROUP BY StartWk) B
ON A.Week = B.startWk
LEFT JOIN (SELECT FinishWk, count(1) Finished
FROM TABLE
GROUP BY FinishWk) C
ON A.Week = C.FinishWk
はいそれが可能です。 – xQbert
何を試しましたか? –
はい、可能です。同じ年+週にcount(startWk)とcount(FinishWk)を使用します。 GROUP BY句を使用した後 – Mattasse