0

サンプルテーブル:

+------+--------+---------+
|  id  |  type  |  date   |
+------+--------+---------+
|    1 |    A   | 201205  |
|    2 |    A   | 201206  |
|    3 |    A   | 201206  |
|    4 |    A   | 201207  |
|    5 |    B   | 201205  |
|    6 |    B   | 201206  |
|    7 |    C   | 201206  |
|    8 |    C   | 201206  |
+------+--------+---------+

目標: 毎月の各タイプの金額を表示する:

+------+--------+--------+--------+
|      | 201205 | 201206 | 201207 |
+------+--------+--------+--------+
|  A   |    1   |    2   |   1    |
|  B   |    1   |    1   |   0    |
|  C   |    0   |    2   |   0    |
+------+--------+--------+--------+

実際のテーブルには何ヶ月もあるのですが、わざわざ結合を使わずにSQLを書く方法は?

これを行うために複数の結合を使用しました.SQLは非常に長くなり始め、別の言語を使用して動的に生成する必要がありました.

SELECT type ``, a.201205, b.201206, c.201207 FROM
(SELECT type FROM t GROUP BY type) foo
LEFT OUTER JOIN
(SELECT count(id) `201205` ,type FROM t WHERE date = '201205' GROUP BY type) a
USING (type)
LEFT OUTER JOIN 
(SELECT count(id) `201206` ,type FROM t WHERE date = '201206' GROUP BY type) b
USING (type)
LEFT OUTER JOIN 
(SELECT count(id) `201207` ,type FROM t WHERE date = '201207' GROUP BY type) c
USING (type)

PS: 投稿の適切なタイトルが見つかりません。変更を手伝ってください。

4

1 に答える 1

0

これは、探している形式で正確に出力されるわけではありませんが、「毎月の各タイプの量」が表示されます。

SELECT DISTINCT date, type, COUNT(*) AS Amount FROM table GROUP BY date, type
于 2012-07-04T02:58:42.187 に答える