SQL質疑応答スレ 10問目at DB
SQL質疑応答スレ 10問目 - 暇つぶし2ch844:NAME IS NULL
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で出来ると聞いたのですが
どんな書き方するのでしょうか



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch