
SQLServer2008を使用しています。
下記のように一つの売上データが伝票番号をキーとして一つのテーブルに複数レコードに分けて登録されています。
伝票番号 分類 区分 データ
1 1 1 2500
1 2 1 0
1 3 1 A123
2 1 1 9800
2 2 2 0
2 3 1 0
分類が1だと売上金額、2だと区分が1なら現金、2ならカード支払いなどとフィールド内の値によって意味分けされています。
上記例ですと伝票番号1は顧客ID A123の客が現金で2500円、
伝票番号2は顧客ID 0(フリー客)客がカードで9800円支払ったデータということになります。
上記のようなデータ構造で現金の売上のみ、カード売上のみの集計などを行いたいのですが、
同一テーブル内の別レコードの値を条件に検索集計をSQL文だけで行うことは可能でしょうか?
可能でしたらどのようなSQLを使用すれば良いのか教えていただけると幸いです。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
環境が無いので不明ですが、以下のような理論で
実行すればよいのでは?
(1)売り上げだけのクエリを作る。
(2)支払い方法だけのクエリを作る。
(3)上記を結合して、支払い方法別の集計をとる。
SELECT
MAX(A.ダミー) AS 架空,
SUM(CASE B.区分 WHEN 1 THEN A.データ ELSE 0 END) AS 現金,
SUM(CASE B.区分 WHEN 2 THEN A.データ ELSE 0 END) AS カード
FROM
(SELECT 1 AS ダミー,伝票番号,データ FROM テーブル WHERE 分類=1) AS A
INNER JOIN
(SELECT 伝票番号,区分 FROM テーブル WHERE 分類=2) AS B
ON A.伝票番号=B.伝票番号
GROUP BY A.ダミー
SQLを考える時は先ず理論を組み立てから実施しないと
何時までも使えるようになりませんよ。
No.4
- 回答日時:
No.3です。
すみません。
すでに nda23さんが同様の回答(1レコードにまとめるか別レコードに分けるかが違いますが)をされていましたね。
また、補足に
>データ項目は数値項目です。顧客コードも数値で入っています。
とあるのに、余計な変換も入れてしまいました・・・
ちゃんと読まずに申し訳ないです。
No.3
- 回答日時:
売上金額レコードと支払方法レコードを自己結合すればいいのではないでしょうか。
select
支払方法, sum(金額) 合計金額
from (
select
convert(int, amount.データ) 金額
,case payment_method.区分
when 1 then '現金'
when 2 then 'カード'
else '不明'
end as 支払方法
from t amount
inner join t payment_method
on amount.伝票番号 = payment_method.伝票番号
and payment_method.分類 = 2
where amount.分類 = 1)
group by 支払方法;
SQLServerの環境が無いので動作確認はしていません。
No.2
- 回答日時:
データに数値と「A123」のような文字が入っているものがありますが、これはどのように考えればいいのでしょう。
データがVARCHARで複数レコードに別れていいならSELECT 分類, SUM(CAST(データ AS INT)) 集計金額
FROM 売上データ
WHERE 分類 IN ( '1', '2' )
GROUP BY 分類;
後、「顧客ID」と書かれていますが売上データにはそれに類するものが見当たらないのが気になります。
nora1962様
早々のアドバイスありがとうございます。
データ項目は数値項目です。顧客コードも数値で入っています。
紛らわしい書き方で申し訳ない。
>売上データにはそれに類するものが見当たらないのが気になります。
同じ伝票番号のレコード全部で一つの売上げデータになっています。
で分類の値によってデータフィールドの中身が売上金額や顧客コードに別れています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- その他(データベース) accessについて 2 2022/05/31 16:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BY関係で、こんなことは...
-
SQLで追加処理
-
Accessのフォームで思った順番...
-
updateでグループ化
-
並び替え
-
マイクラPC版のコマンドで効率...
-
MERGEコマンドについて
-
アドインの削除
-
エクセルの関数について教えて...
-
text型のデータをintegerにキャ...
-
行数の取得
-
英語での答え方はこれで正解で...
-
for whichの使い方
-
顧客データベースを作る場合、...
-
no pain , no gain
-
サブクエリ
-
抽出したデータの結合
-
MySQL5.5 viewの処理速度改善に...
-
FPDFを利用したサンプルコード
-
Mysql でレコードを追加した時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
updateでグループ化
-
LEFT JOIN あいまいな外部結合
-
商品番号を入力すると、商品名...
-
Accessのフォームで思った順番...
-
orace SQL文のエラー(ORA-0092...
-
特定条件での連番の振り方を教...
-
IDの欠番
-
2つのテーブルを結合して最大値...
-
各伝票に対して明細を1行目だけ...
-
Word差し込み印刷 数式について
-
アクセスのフォームで連動した...
-
ACCESSでテキストデータ...
-
エクセルでリピート率
-
Accessレポート 複数条件での集計
-
ファイルメーカーからCSVへのエ...
-
accessフォームのボタン→レポー...
-
アクセス メインフォームの伝...
-
文字列のあるキーワードから開...
-
ACCESSでフォーム上のオブジェ...
-
同一テーブルのデータを検索条...
おすすめ情報