ネットが遅くてイライラしてない!?

☆以下のようなテーブルで、フィールド[ID]~[点数]があり、文字および数字のデータが混在しています。
  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓
===========================================
(テーブル(1))
[ID]  [クラス]  [科目]  [点数]    
1     A     英語    11   
2     B     英語    22   
3     C     数学    33   
4     A     国語    44  
5     B     数学    55   
6     C     国語    66   
7     B     国語    77  
8     C     英語    88    
9     A     数学    99    
===========================================

☆上記のテーブルをクロス集計クエリで集計する
・フィールド[クラス]を行見出しに設定、
・フィールド[科目]を列見出しに設定、
・フィールド[点数]を集計する項目にし主計方法を「合計」に設定する。
===========================================
[クロス集計結果]
  合計   英語  国語  数学      
A  154   11    44    99       
B  154   22    88    55    
C  187   99    77    33 
===========================================

[課題] クロス集計クエリで、集計値を四捨五入する

(1) フィールド[クラス]を行見出しに設定、
   フィールド[科目]を列見出しに設定、
   フィールド[点数]を集計する項目にし主計方法を「合計」に設定する。

(2) クロス集計の値を、下1桁で四捨五入した値を表示する。
 
(3) 「合計」の値を、下1桁で四捨五入した値を表示する。

※ クロス集計した合計値を、四捨五入した値を表示する
  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓
===========================================
[クロス集計結果]
  合計   英語  国語  数学    
A  150   10    40   100       
B  150   20    80    60    
C  190   90    70    30 

===========================================
  ↑  ↑  ↑  ↑  ↑  ↑  ↑  ↑   
上記のように、クロス集計クエリでの集計値を四捨五入して
表示させたいのですが、どうすればよろしいでしょうか?
また、クエリだけでは出来ない場合は、SQLで教えていただければ
幸いでございます。

お手数お掛けしますが、何とぞ宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (11件中1~10件)

実現する方法は1つでないと思いますので・・・


実際の環境に合うものなのか等々、自己責任にてお願いします。

前提条件)

・提示されたサンプルデータのテーブル名を「TB_A」とします。
・「クラス」と「科目」の組み合わせで、重複がないものとします。
(例えば、クラス「A」で科目「英語」のデータは1件)
(提示サンプルも重複がないみたいなので)

クエリのSQLビューは、

TRANSFORM ((First(点数)+5)\10)*10 AS 点数の値
SELECT クラス, ((Sum(点数)+5)\10)*10 AS 合計
FROM TB_A
GROUP BY クラス
PIVOT 科目;

ここで、クラス「B」の合計は、3科目の合計になっていませんが、
それはそれで良いでしょうか。20 + 80 + 60 = 160 ≠ 150

3科目の合計に合わせるのなら、

TRANSFORM ((First(点数)+5)\10)*10 AS 点数の値
SELECT クラス, Sum(((点数+5)\10)*10) AS 合計
FROM TB_A
GROUP BY クラス
PIVOT 科目;

合計部分で、
Sum した結果を四捨五入するか、
四捨五入したものを Sum するかの違いです。

四捨五入は、5を足して、10で割った商だけを求めて、10をかけて。
(過去回答で、「\」円マークが「?」に置き換わったことがあります)
(もし「?」になっているとしたら、そこは円マークです)



蛇足)

上記前提条件で、今回提示のテーブルデータを使い、
前回質問の平均行を追加した以下表示について、

クラス 合計  英語  国語  数学
A    154  11   44   99
B    154  22   77   55
C    187  88   66   33
平均  165  40   62   62

サブクエリは使いますが、クロス集計クエリ1つでできそうです。

TRANSFORM IIF(S=0,First(点数),Int(Avg(点数))) AS 点数の値
SELECT クラス, IIF(S=0,Sum(点数),Int(Sum(点数)/S)) AS 合計
FROM (
SELECT 0 AS S, クラス, 科目, 点数 FROM TB_A
UNION ALL
SELECT T1.CT, '平均', TB_A.科目, TB_A.点数 FROM TB_A,
(SELECT Count(*) AS CT FROM (SELECT DISTINCT クラス FROM TB_A)) AS T1
) AS Q1
GROUP BY S, クラス
PIVOT 科目;

できる/使えるは違うと思います。
条件が変わった・・・問題発生すると思います。
クエリ2つの方が後々わかりやすい/使いやすいかも。

ちなみに、これであれば、科目に追加があっても変更する必要はありません。

[ID]  [クラス]  [科目]  [点数]    
10    D     数学    44    
11    D     物理    55    

が追加された時の結果は、

クラス 合計 英語 国語 数学 物理
A    154 11  44  99  空白
B    154 22  77  55  空白
C    187 88  66  33  空白
D    99 空白 空白  44  55
平均  148 40  62   57  55

科目部分の平均は、空白以外のもので計算されます。
空白部分を 0 として解釈したい場合は、

TRANSFORM IIF(S=0,First(点数),Int(Avg(点数))) AS 点数の値

TRANSFORM IIF(S=0,First(点数),Int(Sum(点数)/S)) AS 点数の値

とすると、平均行部分は

クラス 合計 英語 国語 数学 物理
平均  148  30  46  57  13

となり、

TRANSFORM IIF(S=0,First(点数),Round(Sum(点数)/S,2)) AS 点数の値
SELECT クラス, IIF(S=0,Sum(点数),Round(Sum(点数)/S,2)) AS 合計

と(小数点以下3桁目を四捨五入)すると、平均行部分は

クラス 合計  英語 国語 数学  物理
平均  148.5 30.25 46.75 57.75 13.75

となります。



参考になれば・・・自己責任で・・・
    • good
    • 0
この回答へのお礼

30246kiku様

ご回答をありがとうございました。
早速試したところ、数値の四捨五入と平均行の追加の両方共に、私の希望通りの結果を得られました。SQL文1つで実現できるとは、感激いたしました!
また、SQLについて分かりやすく説明してくださり、とても勉強になりました。
これを活用できるよう、もっとSQLを勉強してみたいと思っております。
また質問させていただくこともあるかと存じますが、今後とも宜しくお願い致します。

お礼日時:2011/01/25 00:14

#10です



>(もし「?」になっているとしたら、そこは円マークです)

「\」円マーク部分はバックスラッシュになったようです。

四捨五入計算部分になります。

全角で書くと、(Sum(点数)+5)¥10*10 のようになります。
    • good
    • 0

合計、英語、国語、数学


と出したクロス集計クエリに対し、
デザイン画面で、合計列をコピーし、平均とする。集計も平均とすれば、
合計、平均、英語、国語、数学
のクロス集計クエリが出来上がります。クロス集計クエリ1つです。

参考で。
    • good
    • 0

#5、#6は二つのクエリで出す平均です。

平均は
(2)のユニオンクエリで表示されます。
なお、#4のクエリに表示ミスがありました。
以下に変更してください。

TRANSFORM funcSG(Sum([テーブル].[C])) AS Cの合計
SELECT [テーブル].[A], Sum(funcSG([テーブル].[C])) AS [合計 C]
FROM テーブル
GROUP BY [テーブル].[A]
PIVOT [テーブル].[B];

関数funcSGの中で、

'数字の右端の判定

とは、要するに下1桁の数値の判定です。
    • good
    • 0

(テーブル(1))


[ID]  [クラス]  [科目]  [点数]  [四捨五入]    
1     A     英語    11   10
2     B     英語    22   20
3     C     数学    33   30

としないのでしょうか?。

各明細の四捨五入を求めてからクロス集計(の合計)と
各明細のクロス集計結果をそのまま四捨五入、
とで誤差がでていいのか、一応確認してください。

1     A     英語    13
だったら
合計は[150]でなくて、[13+44+99=156=160]では?。

まず、各明細で四捨五入を求めるのでは?。

クロス集計の作り方を考える「課題」であればどちらでもいいですが・・・。
    • good
    • 0
この回答へのお礼

layy 様

早々のご回答をありがとうございました。
上記の集計結果のようにしない理由は、クロス集計クエリで作成した集計表の列と行の両方に集計値(合計や平均など)を表示する方法を知りたかったのです。また、クロス集計した値を四捨五入し、その四捨五入した値の集計(合計や平均など)を算出したかったたため合計の値がズレてしまっておりました。
色々とアドバイスをいただき、大変勉強になりました。早速、活用してみたいと思います。
また質問等をさせていただくこともあるかと思いますが、宜しくお願い致します。

お礼日時:2011/01/25 00:25

すみません。

訂正です。
(2)の中の"英数国クロス集計"は"英数国"の
つもりでしたが、ついでですから、変更しやすい
クロス集計クエリの名前を、"英数国クロス集計"
で保存してください。
    • good
    • 0

(1)


クロス集計クエリの作成:
以下のSQLを新しいクエリのSQLビューに貼り付け、
英数国という名前で保存してください。
テーブルはテーブル名のつもりです。実際に
合わせて変更してください。

TRANSFORM Sum(テーブル.C) AS Cの合計
SELECT テーブル.A, Sum(テーブル.C) AS [合計 C]
FROM テーブル
GROUP BY テーブル.A
PIVOT テーブル.B;

(2)
同様に、以下のSQL文を新しいクエリのSQLビューに
貼り付け、適当な名前で保存してください。長いので、
コピー、貼り付けに注意をしてください。

SELECT 英数国クロス集計.A, 英数国クロス集計.[合計 C], 英数国クロス集計.英語, 英数国クロス集計.国語, 英数国クロス集計.数学
FROM 英数国クロス集計
UNION SELECT '平均' AS A平均, Int(Avg([合計 C])) AS 合計平均, Int(Avg([英語])) AS 英語平均, Int(Avg([国語])) AS 国語平均, Int(Avg([数学])) AS 数学平均
FROM 英数国クロス集計;


(2)のクエリはユニオンクエリです。たぶん、
クエリがよく分かっている人はこの方法に
気づいていると思いますが。

なお、この場合、たとえば、国語などに
点数が一部無い場合、点数を何もテーブルに
入れない状態ですと、平均はその無い場合を
カウントせずに平均をだします。しかし、
0を入れるとその0をカウントして平均を
出します。つまり、テーブルのNullと0
を分けてカウントし、平均を出します。

説明がごちゃごちゃしましたが、テーブルに
データが無い場合、クエリでその部分を
0に表示し、なおかつ、0をカウントしないで
平均を出したいということになると、
また、ややこしいことをするようになるので
先に述べておきます。

普通に使うにはこれで十分です。
    • good
    • 0

別に$MSの関数が、という


わけではありませんが、今回の場合に
即して、自作関数を設定してみました。

下一桁で四捨五入なので、以下を
標準モジュールに設定します。

Function funcSG(ByVal x As Long) As Long
Dim y As Long
If x > 0 Then
'数字の右端の判定
y = Right(x, 1)
If y > 4 Then
funcSG = x - y + 10
Else
funcSG = x - y
End If
End If
End Function


クロス集計クエリの設定:
"テーブル名"は実際のテーブル名を入れてください。

TRANSFORM funcSG(Sum([テーブル名].[C])) AS Cの合計
SELECT テーブル名.A, funcSG(Sum([テーブル名].[C])) AS [合計 C]
FROM テーブル名
GROUP BY テーブル名.A
PIVOT テーブル名.B;


なお、
http://oshiete1.watch.impress.co.jp/qa6455150.html
は二つのクエリでできます。必要なら表示します。

この回答への補足

piroin654 様

早々のご回答をありがとうございました。早速、試してみたいと思います。

「クロス集計クエリでの合計と平均」について、二つのクエリでできるとのアドバイスをいただきましたが、よろしければクエリでの作成方法を教えていただけると助かります。

お手数お掛け致しますが、宜しくお願い致します。

補足日時:2011/01/23 21:29
    • good
    • 0
この回答へのお礼

piroin654 様

ご回答くださりありがとうございました。
自作関数をモジュールに設定し、SQLを実行してみましたところ、おかげ様で希望通りに四捨五入の集計結果を得ることができました。

いつも、ご丁寧なご説明をいただき大変感謝いたしております。
また質問させて頂くこともあると思いますが、今後とも宜しくお願い致します。

お礼日時:2011/01/24 00:13

Access の Round関数は銀行型丸めです。



round(85/10,0.1)*10 も round(75/10,0.1)*10 も結果は、80 になります。

なので#1で紹介されている関数を標準モジュールにいれます。
なお関数名はややこしくなるのでMyRoundにします。
また通貨型で返ってきますので、今回の場合はDouble型で十分でしょう。
 
Function MyRound (X As Double, s As Integer) As Double
  Dim t As Double       ’変数の宣言をします。
  t = 10 ^ Abs(s)        ’ Abs 関数で s の絶対値に 10 を掛けます。
  If s > 0 Then         ’ s > 0 の時は、
    MyRound = Int(X*t + 0.5) / t ’ Int( X * t + 0.5 ) / t の値を返します。
   Else             ’ s <= 0 の時は、
    MyRound = Int(X/t + 0.5) * t ’ Int( X / t +0.5) * t の値を返します。
   End If
End Function

あるいは int(数字/10+0.5)*10でも今回の場合は大丈夫です。

せっかくなのでMyRoundを使うとして
クエリのデザインビューが多分こうなっているかと思いますが
(T1はテーブル名です)

クラス   科目    数の合計  合計:点数
T1     T1       T1       T1
グループ化 グループ化   合計     合計
行見出し  列見出し     値     行見出し

これを

クラス   科目    点数の合計:myround(sum(T1.点数),1) 合計:myround(sum(T1.点数),1)
T1                     
グループ化 グループ化   演算               演算
行見出し  列見出し    値                行見出し

にしてみてください。
SQLビューだと、
TRANSFORM myround(Sum(T1.点数),1) AS 点数の合計
SELECT T1.クラス, myround(Sum(T1.点数),1) AS 合計
FROM T1
GROUP BY T1.クラス
PIVOT T1.科目;

※SQL文をグラフィック的に見やすくしたのがクエリです
SQL≒クエリ

この回答への補足

nicotinism 様
早々のご回答をありがとうございました。
早速、モジュールを設定しSQLを試してみたのですが、私のスキル不足のためか、四捨五入での集計結果をえることができませんでした。
クエリを実行すると、通常の合計値が表示されてしまいました。。

もしよろしければ、再度ご教授いただだければ幸いでございます。
宜しくお願い致します。

補足日時:2011/01/24 00:23
    • good
    • 0
この回答へのお礼

nicotinism 様
ご回答いただき、ありがとうございました。
標準モジュールやSQLについて、大変分かりやすく説明してくださり、とても勉強になりました。
これを活用できるよう、もっとSQLを勉強してみたいと思っております。
また、質問させていただくこともあるかと存じますが、今後とも宜しくお願い致します。

お礼日時:2011/01/25 00:29

2003だったんですね(件名のところを見落としてました)その場合Round関数は元々ありますので自作する必要がありませんから



たとえば、連結テキストボックスにクエリの「英語」を連結し非表示にした後
非連結テキスト ボックスを作成しそのコントロールソースを

=Round([英語]/10,0)*10

にします。
    • good
    • 0
この回答へのお礼

Kmetu様
ご回答いただき、ありがとうございました。
これを活用できるよう、もっとSQLを勉強してみたいと思っております。
また、質問させていただくこともあるかと存じますが、今後とも宜しくお願い致します。

お礼日時:2011/01/25 00:32

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセスの集計クエリの件

アクセスのクエリを使って集計計算をする際、エクセルで言うround関数のような処理をする方法はありますか。あれば教えてください。ヨロシクお願いします。

Aベストアンサー

>アクセスのクエリを使って集計計算をする・・・

集計計算とは、クロス集計のことですか?
普通の選択クエリでの計算でしたら、INT関数を使えば
ROUND関数のような処理ができます。

小数点以下四捨五入:INT([フィールド]+0.5)
小数点以下切り捨て:INT([フィールド])
小数点以下切り上げ:INT([フィールド]+0.9)
上記式で、小数点第一位で処理ができます。

小数点以下二位とか十の位での処理は、一工夫必要です。

質問の意味が違っていたらごめんなさい。

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください

QAccess2003 クロス集計クエリでの合計

☆以下のようなテーブルで、フィールド[ID]~[C]があり、文字および数字のデータが混在しています。
  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓
===========================================
(テーブル(1))
[ID]  [A]      [B]    [C]    
1    111     英語    10   
2    222     英語    20   
3    333     数学    30   
4    111     国語    40  
5    222     数学    50   
6    333     国語    60   
7    222     国語    70  
8    333     英語    80    
9    111     数学    90    
===========================================

[課題] クロス集計クエリを作成する

(1) フィールド[A]を行見出しに設定、
   フィールド[B]を列見出しに設定、
   フィールド[C]を集計する項目に設定する。
 
(2) フィールド[C]の値を列ごとに平均を計算し、
   行ごとに合計を計算する。
  ※ 列と行で、それぞれ集計した値を表示する
  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓
===========================================
[クロス集計結果]
    合計  英語  国語  数学    
111  140   10    40    90       
222  140   20    70    50    
333  170   80    60    30 
---------------
平均  150   36     56   56
===========================================
  ↑  ↑  ↑  ↑  ↑  ↑  ↑  ↑   
上記のようなクロス集計クエリの結果を表示させたいのですが、
どうすればよろしいでしょうか?
また、クエリだけでは出来ない場合は、SQLで教えていただければ幸いでございます。

お手数お掛けしますが、何とぞ宜しくお願い致します。

☆以下のようなテーブルで、フィールド[ID]~[C]があり、文字および数字のデータが混在しています。
  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓
===========================================
(テーブル(1))
[ID]  [A]      [B]    [C]    
1    111     英語    10   
2    222     英語    20   
3    333     数学    30   
4    111     国語    40  
5    222     数学    50   
6    333     国語    60   
7    2...続きを読む

Aベストアンサー

クエリでやろうと思えば、

【テーブルからクロス集計】
Aに対する科目別の合計を出す

______合計__英語__国語__数学
111___140_____10____40____90
222___140____ 20____70____50
333___170_____80____60____30


【テーブルからクロス集計】
Bに対するAごとの合計を出す(軸を逆に考える)

______A’___合計__平均___111__222__333
英語___999___110___110/3___10___20___80
国語___999___170___170/3___40___70___60
数学___999___170___170/3___90___50___30

「A’」列はダミーです。
こうしておくと、「A’」「科目」「合計」か「平均」と3項目あるので、
同じく、クロス集計の作られ方を利用すると、

合計行のためのレコード
_______英語___国語____数学
999_____110____170_____170

または
平均行のためのレコード
_______英語___国語____数学
999___110/3__170/3___170/3

ができあがります。

【テーブルからクロス集計】に追加レコードとしてやれば、
フォームでは、同じレコードソースになります。
他のクエリ等で平均や合計を求めて、
母体のクエリ結果にレコード追加してやる、という手です。
レコード区分を設けて、明細は01、合計は02、平均は03とし並べると
おのずと後ろの方に合計、平均となります。

それか、
他のクエリ等で平均や合計を求めているのだから、
フッタ等でダイレクトにその値を取得するのがよくある例かと思います。
Dlookup関数等使うと、他テーブルのとあるフィールドの値を取得したりできます。
「フォームのフッタに合計を出す」
という観点でさがしてみてはどうでしょうか。

クエリでやろうと思えば、

【テーブルからクロス集計】
Aに対する科目別の合計を出す

______合計__英語__国語__数学
111___140_____10____40____90
222___140____ 20____70____50
333___170_____80____60____30


【テーブルからクロス集計】
Bに対するAごとの合計を出す(軸を逆に考える)

______A’___合計__平均___111__222__333
英語___999___110___110/3___10___20___80
国語___999___170___170/3___40___70___60
数学___999___170___170/3___90___50___30

「A’」列はダミーです。
こうしておくと、...続きを読む

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qクエリで合計を出したい。。

こんにちは。
初歩的な質問で申し訳ありませんが、回答お願いします。
アクセスで売上をつけています。
地区ごとのクエリで合計を出したいのですが

社名  地区  売上
A社 ○○地区 1000
B社 ○○地区 2000 
C社 ○○地区 3000
D社 ○○地区 4000
E社 ○○地区 5000

という感じなんですが
どこかのセル(アクセスでもセルと呼ぶのでしょうか^_^;?)に売上の合計(ここでは15000です)が出るようにしたいのですが・・・。

Aベストアンサー

地区ごとの合計を出したいのなら、
クエリを作成し、該当するテーブルを選び
「地区」、「売り上げ」を選択して
右クリックして「集計」をクリックし
「地区」の集計を「グループ化」
「売り上げ」の集計を「合計」にする。

SQLビューで見ると

SELECT 地区名, Sum(売り上げ) AS 合計 FROM テーブル名 GROUP BY 地区名;

といった感じかな。

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QAccessのクエリの数値表示について

Access2002を勉強中の初心者です。

ある選択クエリから集計クエリを作成しました。
元のクエリの数値表示は少数が表示されていないのですが(例1,234)、集計クエリの方を開くと数値に少数点2位まで表示されています(例1,234.00)。この少数表示が目障りなので、表示しないようにしたいのですが、できますか?

よろしくお願いします。

Aベストアンサー

クエリ:デザインビューの小数点を非表示にしたい列上で右クリックすると列のプロパティが表示出来ます。
そこで小数点表示の指定が出来る項目があります。
もし全て整数のデータ列であれば、これで表示上は対応出きます。

ただし、小数点も含まれるデータ列でしたら、Format関数で対応した方が良いですね。
関数については、ネットでもたくさん紹介されているので、調べてみてください。

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QACCESS 重複データを1つだけ表示したい(初心者です)

ACCESSで複数のフィールドに全く同じレコードが複数存在します
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
愛知      田中      12
愛知      田中      12
三重      山本      23
三重      山本      23
岐阜      鈴木      33
岐阜      鈴木      33

もともと他のデーターベースからCSVで落としたものをインポートしているので、データの存在自体はどうしようもありませんが、これらの重複しているデータを1件だけ表示したいのです。つまり
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
三重      山本      23
岐阜      鈴木      33

どのようにすればよいでしょうか。

Aベストアンサー

クエリにて[固有のレコード]プロパティーを[はい]にします

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング