私が持っているテーブルと私が目指している結果から始めるのが最も簡単だと思います.
Name | Date
A | 03/01/2012
A | 03/01/2012
B | 02/01/2012
A | 02/01/2012
B | 02/01/2012
A | 02/01/2012
B | 01/01/2012
B | 01/01/2012
A | 01/01/2012
クエリの結果を次のようにしたい:
Name | 01/01/2012 | 02/01/2012 | 03/01/2012
A | 1 | 2 | 2
B | 2 | 2 | 0
したがって、基本的には、同じ日付を持つ行の数を数えたいと思いますが、個々の名前ごとです。したがって、名前を一緒にマージするため、日付による単純なグループ化はできません。そして、PHPを使用して、個々の日付ごとのカウントを示すテーブルを出力したいと思います.
私は答えが次のようなことを示唆しているのを見てきました:
SELECT
NAME,
SUM(CASE WHEN GRADE = 1 THEN 1 ELSE 0 END) AS GRADE1,
SUM(CASE WHEN GRADE = 2 THEN 1 ELSE 0 END) AS GRADE2,
SUM(CASE WHEN GRADE = 3 THEN 1 ELSE 0 END) AS GRADE3
FROM Rodzaj
GROUP BY NAME
だから私はそれを微調整する方法があると思いますが、別の方法があるかどうか疑問に思っていましたか、それとも最も効率的ですか? while ループが毎回特定の名前と日付を 1 つだけ出力し、カウントとともに出力する場合、最初の結果は A,01/01/2012,1 になり、次の A,02/01/2012 になるのではないかと考えていました。 2 - A,03/01/2012,3 - B,01/01/2012,2 などの場合、別の手法で実行できる可能性がありますが、そのようなことが可能かどうか、効率的かどうかはわかりません。
だから私は基本的に誰かがこれについて少し枠の外にあるアイデアを持っているかどうか、そしてそれらがどのように比較されるかを探しています.
すべてを十分に説明したことを願っています。事前に助けてくれてありがとう。