アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access2003 集合クエリ(SQL文の書き方)
下記のようなデータがあります

価格  数量
480   1
1000 2
1100 3
2500 1
3300 2
2800 1


これを下記のように各価帯に数量合計をまとめいたいのですが
499円以下   1
500~999円  0
1001~1999円 5
2001~2999円 2
3001~3999円 2

このような値を求めるSQL文はかけるのでしょうか?

A 回答 (4件)

SELECT [%$##@_Alias].価格帯, Sum([%$##@_Alias].数量S) AS 数量


FROM [SELECT "499円以下" AS 価格帯,0 AS 数量S,0 AS 表示順
FROM テーブル1
UNION
SELECT "500~999円" AS 価格帯,0 AS 数量S,1 AS 表示順
FROM テーブル1
UNION
SELECT "1000~1999円" AS 価格帯,0 AS 数量S,2 AS 表示順
FROM テーブル1
UNION
SELECT "2000~2999円" AS 価格帯,0 AS 数量S,3 AS 表示順
FROM テーブル1
UNION
SELECT "3000~3999円" AS 価格帯,0 AS 数量S,4 AS 表示順
FROM テーブル1
UNION
SELECT IIf([価格]<500,"499円以下",IIf([価格]<1000,"500~999円",IIf([価格]<2000,"1000~1999円",IIf([価格]<3000,"2000~2999円","3000~3999円")))) AS 価格帯, Sum(テーブル1.数量) AS 数量S,IIf([価格]<500,0,IIf([価格]<1000,1,IIf([価格]<2000,2,IIf([価格]<3000,3,4)))) AS 表示順
FROM テーブル1
GROUP BY IIf([価格]<500,"499円以下",IIf([価格]<1000,"500~999円",IIf([価格]<2000,"1000~1999円",IIf([価格]<3000,"2000~2999円","3000~3999円")))),IIf([価格]<500,0,IIf([価格]<1000,1,IIf([価格]<2000,2,IIf([価格]<3000,3,4))))]. AS [%$##@_Alias]
GROUP BY [%$##@_Alias].価格帯, [%$##@_Alias].表示順
ORDER BY [%$##@_Alias].表示順;
    • good
    • 0

追記。



UNIONの前半部分は「数量が0のレコードを生成する部分」です。この部分が無い

SELECT IIf([価格]<500,"499円以下",IIf([価格]<1000,"500~999円",IIf([価格]<2000,"1000~1999円",IIf([価格]<3000,"2000~2999円","3000~3999円")))) AS 価格帯, Sum(テーブル1.数量) AS 数量
FROM テーブル1
GROUP BY IIf([価格]<500,"499円以下",IIf([価格]<1000,"500~999円",IIf([価格]<2000,"1000~1999円",IIf([価格]<3000,"2000~2999円","3000~3999円")))), IIf([価格]<500,0,IIf([価格]<1000,1,IIf([価格]<2000,2,IIf([価格]<3000,3,4))))
ORDER BY IIf([価格]<500,0,IIf([価格]<1000,1,IIf([価格]<2000,2,IIf([価格]<3000,3,4))));

と言うクエリだと

価格帯数量
499円以下1
1000~1999円5
2000~2999円2
3000~3999円2

となってしまい

500~999円0

のレコードが出ません。
    • good
    • 0
この回答へのお礼

iifとかsql文の中で使えるのですね。勉強になりました。

お礼日時:2010/03/18 09:06

質問が若干おかしいようです


1001~1999円→1000~1999円

クエリを二段階にする。テーブル名やフィールド名が判らないので、適当に命名したサンプルで試しました。

・第一段階
SELECT [品物].価格, [品物].数量, Int([品物].[価格]/500) AS 式1
FROM 品物;

・第二段階
SELECT [価格帯].呼び名, [価格帯].価格グループ, Sum(クエリ1.数量) AS 数量の合計
FROM 価格帯 INNER JOIN クエリ1 ON [価格帯].価格値 = クエリ1.式1
GROUP BY [価格帯].呼び名, [価格帯].価格グループ
ORDER BY [価格帯].価格グループ;

・価格帯テーブルには呼び名フィールドを持たせ「1000~1999円」などが入っています。
・#2にも指摘されていますが
500~999円
などを出すためには、各価格帯に対し、数量0のダミーデータを置いては如何でしょうか?
「Access2003 集合クエリ(SQL」の回答画像3
    • good
    • 0
この回答へのお礼

>質問が若干おかしいようです
>1001~1999円→1000~1999円

そうですよね。1000~1999円でした。
やぱり、段階に区切ってSQL文書いた方がわかりやすいですかね。
ありがとうございました。

お礼日時:2010/03/18 09:09

#3です。


ダミーを使用せず「500~999円  0」を出すSQL文

SELECT [価格帯].呼び名, Sum(IIf(IsNull([数量]),0,[数量])) AS 数量の合計
FROM 価格帯 LEFT JOIN クエリ1 ON [価格帯].価格値 = クエリ1.式1
GROUP BY [価格帯].呼び名, [価格帯].価格グループ
ORDER BY [価格帯].価格グループ;
    • good
    • 0

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