• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同一テーブルのデータを検索条件に使いたい)

同一テーブル内のデータを検索条件に使いたい-質問

このQ&Aのポイント
  • 同一テーブルのデータを条件にして集計するためのSQL文を教えてください。
  • 伝票番号をキーとして複数のレコードが登録されたテーブルで、特定の条件で集計を行いたいです。
  • 具体的には、分類が1のデータの売上金額を取得したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答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を考える時は先ず理論を組み立てから実施しないと 何時までも使えるようになりませんよ。

MegaZanac
質問者

お礼

nda23様 早々のご指導ありがとうございます。 教えていただいたSQLをまず理解してみます。

その他の回答 (3)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.4

No.3です。 すみません。 すでに nda23さんが同様の回答(1レコードにまとめるか別レコードに分けるかが違いますが)をされていましたね。 また、補足に >データ項目は数値項目です。顧客コードも数値で入っています。 とあるのに、余計な変換も入れてしまいました・・・ ちゃんと読まずに申し訳ないです。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答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の環境が無いので動作確認はしていません。

MegaZanac
質問者

お礼

yamada_g様 アドバイスありがとうございます。 教えていただいたSQLを参考に自己結合を理解したいと思います。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

データに数値と「A123」のような文字が入っているものがありますが、これはどのように考えればいいのでしょう。データがVARCHARで複数レコードに別れていいなら SELECT 分類, SUM(CAST(データ AS INT)) 集計金額 FROM 売上データ WHERE 分類 IN ( '1', '2' ) GROUP BY 分類; 後、「顧客ID」と書かれていますが売上データにはそれに類するものが見当たらないのが気になります。

MegaZanac
質問者

お礼

nora1962様 早々のアドバイスありがとうございます。 データ項目は数値項目です。顧客コードも数値で入っています。 紛らわしい書き方で申し訳ない。 >売上データにはそれに類するものが見当たらないのが気になります。 同じ伝票番号のレコード全部で一つの売上げデータになっています。 で分類の値によってデータフィールドの中身が売上金額や顧客コードに別れています。

関連するQ&A