過去ログ

                                Page      22
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ユニオンクエリーとグループ化  宮本 02/9/10(火) 11:01
   ┗Re:ユニオンクエリーとグループ化  こうちゃん 02/9/10(火) 12:26
      ┗Re:ユニオンクエリーとグループ化  宮本 02/9/10(火) 16:37
         ┗Re:ユニオンクエリーとグループ化  こうちゃん 02/9/10(火) 20:53
            ┗Re:ユニオンクエリーとグループ化  宮本 02/9/11(水) 10:37
               ┗確認しました。ごめんなさい。  こうちゃん 02/9/11(水) 10:53
                  ┗Re:確認しました。ごめんなさい。  宮本 02/9/11(水) 11:43

 ───────────────────────────────────────
 ■題名 : ユニオンクエリーとグループ化
 ■名前 : 宮本
 ■日付 : 02/9/10(火) 11:01
 -------------------------------------------------------------------------
   お世話になります。(AC2000 WIN98)

旬ごとの合計を出すのに次のようなSQLユニオン句を作りましたがグループ化が
できません。入庫NOは重複があります。ご教授お願いします。

SELECT "01-10" as 旬, count([入庫No]) as 旬入庫数
FROM TN where (((TN.入庫日) between #2002/09/01# and #2002/09/10#))
UNION SELECT "11-20", count([入庫No]) FROM TN where (((TN.入庫日) between #2002/09/11# and #2002/09/20#))
UNION SELECT "21-31", count([入庫No]) FROM TN where (((TN.入庫日) between #2002/09/21# and #2002/09/30#))
GROUP BY TN.入庫No;

 ───────────────────────────────────────  ■題名 : Re:ユニオンクエリーとグループ化  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/9/10(火) 12:26  -------------------------------------------------------------------------
   宮本 さん、こんにちは

>旬ごとの合計を出すのに次のようなSQLユニオン句を作りましたがグループ化が
>できません。入庫NOは重複があります。ご教授お願いします。
>
>SELECT "01-10" as 旬, count([入庫No]) as 旬入庫数
>FROM TN where (((TN.入庫日) between #2002/09/01# and #2002/09/10#))
>UNION SELECT "11-20", count([入庫No]) FROM TN where (((TN.入庫日) between #2002/09/11# and #2002/09/20#))
>UNION SELECT "21-31", count([入庫No]) FROM TN where (((TN.入庫日) between #2002/09/21# and #2002/09/30#))
>GROUP BY TN.入庫No;

これでGROUP BY TN.入庫Noを外してデータはとれていますか?

UNIONで区分して集計する場合は、1つのSELECT文に該当しない区分のダミー列が必要です。
例えばこんな感じ・・

#TNテーブルの入庫日を旬ごとに区分して、入庫Noの数を集計する
#サブクエリでUNIONを使います
#サブクエリの 0 as [10-20] のように該当する区分以外のフィールドを「値 0」をリテラルに設定して作ります。
#そのあとサブクエリの各旬の合計をSELECTします

ってこれで回答になっていますか?

SELECT sum(t.[01-10]) as 上旬, sum(t.[10-20]) as 中旬, sum(t.[20-30]) as 下旬
from(
SELECT count([入庫No]) as [01-10], 0 as [10-20], 0 as [20-30]
FROM TN where (TN.入庫日 between #2002/09/01# and #2002/09/10#)
UNION ALL
SELECT 0 as [01-10], count([入庫No]) as [10-20], 0 as [20-30]
FROM TN where (TN.入庫日 between #2002/09/11# and #2002/09/20#)
UNION ALL
SELECT 0 as [01-10], 0 as [10-20], count([入庫No]) as [20-30]
FROM TN where (TN.入庫日 between #2002/09/21# and #2002/09/30#)
) as t

 ───────────────────────────────────────  ■題名 : Re:ユニオンクエリーとグループ化  ■名前 : 宮本  ■日付 : 02/9/10(火) 16:37  -------------------------------------------------------------------------
   こうちゃんさん、こんにちは いつも有難うございます。

ごめんなさい。旬の合計ではなくて件数だけが必要です。

>これでGROUP BY TN.入庫Noを外してデータはとれていますか?
 データはとれています

    旬      入庫件数
  −−−−−−−−−−−−−−
  01−10      84
  11−20     122
  21−31     340

ご回答いただいたSQLで実行すると同じ結果になります。

   上旬    中旬    下旬
  −−−−−−−−−−−−−−−−
   84   122   340

さらなるご指導お願いいたします。

 ───────────────────────────────────────  ■題名 : Re:ユニオンクエリーとグループ化  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/9/10(火) 20:53  -------------------------------------------------------------------------
   宮本 さん、ごめんなさい、勘違いしていました。

>ごめんなさい。旬の合計ではなくて件数だけが必要です。
入庫Noの種類が旬ごとにいくつあるかということですか?

>    旬      入庫件数
>  −−−−−−−−−−−−−−
>  01−10      84
>  11−20     122
>  21−31     340

これを

>
>   上旬    中旬    下旬
>  −−−−−−−−−−−−−−−−
>   84   122   340
>

こんな感じで横に並べたいのかと思いました(^^;)

もし各順の入庫Noが1種類ならレコードがいくつあってもこんな感じになるってことでいいですか?

    旬      入庫件数
  −−−−−−−−−−−−−−
  01−10      1
  11−20      1
  21−31      1


で、こんな感じでどうでしょう?
もとの旬毎のデータをDISTINCTで入庫Noごとにリストを作っておいて、旬ごとのリストのUNIONをサブクエリーとして、旬で件数カウントしました。

もうちょっと効率のいいSQLがありそうですが・・

SELECT T.旬, Count(T.旬入庫数) AS 旬入庫数のカウント
FROM (SELECT DISTINCT '01-10' as 旬, 入庫No as 旬入庫数
FROM TN where TN.入庫日 between #2002/09/01# and #2002/09/10#
UNION
SELECT DISTINCT '11-20' as 旬, 入庫No as 旬入庫数
FROM TN where TN.入庫日 between #2002/09/11# and #2002/09/20#
UNION
SELECT DISTINCT '21-30' as 旬, 入庫No as 旬入庫数
FROM TN where TN.入庫日 between #2002/09/21# and #2002/09/30#
) AS T
GROUP BY T.旬;

 ───────────────────────────────────────  ■題名 : Re:ユニオンクエリーとグループ化  ■名前 : 宮本  ■日付 : 02/9/11(水) 10:37  -------------------------------------------------------------------------
   こうちゃんさん、ご教授有難うございます。
説明不足ですみません。

    旬      入庫件数
  −−−−−−−−−−−−−−
  01−10      1
  11−20      1
  21−31      1

以上ご推測のとおりです。が
教えていただいたSQLで実行すると、「クエリ式 ’01−10’の構文エラー・・・
となります。どこか間違っているのでしょうか?ご指摘お願いします。

 ───────────────────────────────────────  ■題名 : 確認しました。ごめんなさい。  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/9/11(水) 10:53  -------------------------------------------------------------------------
   宮本 さん、こんにちは
>こうちゃんさん、ご教授有難うございます。
>説明不足ですみません。
>
>    旬      入庫件数
>  −−−−−−−−−−−−−−
>  01−10      1
>  11−20      1
>  21−31      1
>
>以上ご推測のとおりです。が
>教えていただいたSQLで実行すると、「クエリ式 ’01−10’の構文エラー・・・
>となります。どこか間違っているのでしょうか?ご指摘お願いします。

DISTINCT と '01-10' の間の空白が全角になっていませんか?
AccessのクエリのSQLビューで確認したSQL文をエディタを介してコピペしたのですが、そのうちいずれかでスペースが全角に変えられちゃったようです。

再度、下記をクエリのSQLビューにコピペしてみてください。
エラーが続くようでしたら、スペースを確認してみてください。
(今回はSQLビューから直接コピペしてみました)

SELECT T.旬, Count(T.旬入庫数) AS 入庫数
FROM
(SELECT DISTINCT '01-10' as 旬, 入庫No as 旬入庫数
FROM TN where TN.入庫日 between #2002/09/01# and #2002/09/10#
UNION
SELECT DISTINCT '11-20' as 旬, 入庫No as 旬入庫数
FROM TN where TN.入庫日 between #2002/09/11# and #2002/09/20#
UNION
SELECT DISTINCT '21-30' as 旬, 入庫No as 旬入庫数
FROM TN where TN.入庫日 between #2002/09/21# and #2002/09/30#
) AS T
GROUP BY T.旬;

 ───────────────────────────────────────  ■題名 : Re:確認しました。ごめんなさい。  ■名前 : 宮本  ■日付 : 02/9/11(水) 11:43  -------------------------------------------------------------------------
   こうちゃんさん、出来ました。感謝いたします。
こんな事も気がつかないで恥ずかしい限りですが、よろしくお願いいたします。
有難うございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 22