11/01/29 17:58:38
>>834のcountでなにが悪いのかがわからんや
845:NAME IS NULL
11/01/29 18:13:29 wMofn+ab
>>844
多分検索対象の文を一字づつ削った文
文の文字数分の行を用意しないとだめ
846:NAME IS NULL
11/02/01 21:16:33
・DBMS名とバージョン
Microsoft Access2000
・テーブルデータ
【ITEM_COUNT】
item_id | year | month | count
---------------------------
00001 | 2010 | 1 | 150
00001 | 2010 | 1 | 400
00001 | 2010 | 2 | 20
(中略)
00001 | 2010 | 11 | 120
00001 | 2010 | 11 | 50
00001 | 2010 | 11 | 200
00001 | 2010 | 12 | 30
00001 | 2011 | 1 | 500
00001 | 2011 | 1 | 100
00002 | 2010 | 1 | 10
00002 | 2010 | 2 | 30
00002 | 2010 | 2 | 100
(後略)
※同じid, year, monthのデータが複数存在します。
・欲しい結果
item_id | 1月 | 2月 | … | 11月 | 12月 | 13月
--------------------------------------------
00001 | 550 | 20 | … | 370 | 30 | 610
00002 | 10 | 130 | … | (後略)
※2010/1~2011/1の13ヶ月間を1月~13月として(2011/1を13月として)それぞれ集計を求めたい
・説明
現状は、
------------------------------------
SELECT
year, item_id
FROM
ITEM_COUNT
WHERE
year=2010
GROUP BY
item_id, year
PIVOT
Format(month,"#0月") In ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
------------------------------------
上のクエリを「集計1」、WHERE句を"year=2011"に変更したものを「集計2」とし、
次のクエリで結果を求めています。
------------------------------------
SELECT
集計1.item_id, 集計1.[1月], 集計1.[2月], … , 集計1.[12月],集計2.[1月] AS 13月
FROM
集計1 LEFT JOIN 集計2 ON 集計1.[item_id] = 集計2.[item_id]
------------------------------------
しかしこれだと2011/1にのみデータがあるitem_idが集計から外れてしまいます。
これを回避するにはどのように直したら良いでしょうか。
847:NAME IS NULL
11/02/01 21:36:38
2010/01から2011/01までに存在するitem_idの一覧を求めるクエリに
集計1と集計2をleft outer joinすりゃいいんじゃね?
848:846
11/02/01 22:24:47
>>847
レスありがとうございます。
なんとなくイメージが掴めたのでやってみます。
849:NAME IS NULL
11/02/02 13:52:31
k - Nearest Neighborがsqlで出来ると聞いたのですが
どんな書き方するのでしょうか