SQL集計での品番ごとの小計行の表示方法

このQ&Aのポイント
  • SQLの集計処理で、品番ごとの小計行が重複して表示される問題が発生しています。
  • 現在のSQLの記述では、品番と受信日をグループ化して集計していますが、重複が発生しています。
  • 解決方法として、グループ化の対象から受信日を外すことで重複を回避できます。
回答を見る
  • ベストアンサー

グループ化による集計

グループ化による集計 お世話になります。 下記の様にSQLで集計しようと考えています。 品番で小計額を出そうとしているのですが、 下記記述ですと、小計行が何か2行位ダブって表示されてしまっている様です。 どの様に記述したらダブらないで表示されるでしょうか。 私には少し高度な気がします。 どなたかご親切な方、ご教授下さいます様、宜しくお願いします。            記 select a.計画ID,a.品番,sum(a.合格本数) as 合格本数,sum(a.不良本数) as 不良本数, grouping(a.品番),TO_CHAR(a.受信日,'YYYY/MM/DD')as 受信日 from 伝票LOG a group by rollup(a.計画ID, a.品番, TO_CHAR(a.受信日,'YYYY/MM/DD')) order by a.計画ID 現在の表示 ID       品番   合格本数   不良本数    grouping(a.品番) 1030-2     yyy     20          0      0 1030-2     yyy      30          0      0   1030-2     yyy      50          0      0  ←この行は余計 1030-2     yyy       50          0      0  ←この行は余計 1030-2     (null)       50          0      1

  • Oracle
  • 回答数2
  • ありがとう数3

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

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

No1さんも言っていますが、対象のデータがわからないと何が回答しずらいです。 対象データと、抽出する仕様を具体的に教えてください。 また、記載のSQLと現在の表示の整合性がないです。 受信日はどこにいってしまったのでしょう・・ 具体的かつ正確に質問内容を書いた方が回答も付きやすいと思いますよ。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

もとのデータがないのでよくわかりませんが。 単にselect distinct a.計画ID, ....としたらどうでしょうか。

miruchoko
質問者

お礼

ご回答頂きありがとうございます。 しかしdistinctをつけても同じでした。

関連するQ&A

  • ExcelのSUM関数の集計範囲を可変にしたい

    ExcelのSUM関数の集計範囲を可変にしたい 1.状況、問題点 商品毎の売上、利益を管理するリスト表が あり、その表の行に対する追加、更新処理を VBAマクロで行っています。 使用環境はExcel2010 リスト表は、帳票としての見易さを考慮して、 同じカテゴリに属する複数の行に対して小計行 を設けカテゴリ別の売上、利益を集計しています カテゴリに属する行範囲に対してSUM関数を使っ ているということです (例1)この表にマクロで行を追加させる際、 あるカテゴリの小計欄で参照している集計 範囲の行の途中に行を挿入する場合は、行 を追加してもSUM関数の集計範囲は自動的に 拡大されます。   A  B    C   1 項目   売上    2  田中   100 3 小計   100   4 山田 200 ⇒ 挿入   5  佐藤 300   6  小計   600 式 = SUM(C4:C5) 3行目と4行面の間に行を挿入するとき  SUM関数の集計範囲は自動的に拡大され る  SUM(C2:C4) ⇒ SUM(C2:C5) (例2)挿入する行が集計行の直ぐ上の場合 SUM関数の集計対象範囲がずれてしまう   A   B    C   1 項目  売上   2  田中  100 3 小計  100   4 山田 200   5  佐藤 300 ⇒ 挿入    6  小計 600 ※      ※ 式 SUM(C4:C5) は   自動的にはSUMC(C4:C6)とはならない 2.実現したいこと       小計の直前にに行を挿入した場合も自動的に   集計範囲が変わるようにしたいのです。 実装方法 案1 (1)インストラクタのネタ帳  http://www.relief.jp/itnote/archives/003417.php  に、「表全体の最後の行」※に集計行がある場合として 「合計範囲を自動的に変更する」方法の紹介あり。  この方法はCOUNTA()で入力済みのセルをカウント。   私のケースでは  ・売上、利益などのセルが空白となる場合がある  ・C列は 売上 データを記載する列で   なので半角スペースや全角スペース は入らない  ・#REFやDIV/!0などは入りうる   C4:C5 のセル数は DIV/0!なども含めデータが入っているセル数  +ブランクが入っているセル数 は  COUNTA(C4:C5) + COUNTBlank(C4:C5) なので セル C5  =SUM(C2:INDEX(C4:C5, COUNTA(C4:C5)+COUNTBlank(C4:C5))   とするか?     ※「インストラクタのネタ帳」の方法は、「表全体の行数」を  もとめる場合に最後の行までを指定できて有効ですが、上の  ように小計をもとめる場合は、どうしても小計をもとめる範囲  式に書く必要があり、そこが集計範囲が変わってしまうと役に  立たないです。  代案としては、6行目の小計の行番号から3行目の小計の行番号  を引いて行数を求める方法でしょうか    この方法の場合、小計の式に 6行目行番号-3行目行番号  のように具体的に記述してはNGなので "下"の小計行から"上"  の小計行を引く というような間接的な指定の仕方が必要と  考えています。案1の検討はここまでです。 実装方法 案2  上のように表自体の集計関数を変える以外に、  マクロで対応する方法  行を追加する際に、 a)行の追加がある場合、行の挿入位置が小計   の集計範囲の”途中”なら 何もしない、  b)追加する行が集計行のすぐ上になる場合 つまり変更前の挿入位置+1   が小計行の行番号と等しい時は、追加する行数分   SUM関数の集計範囲を広げる     案1が難しそうなので案2で実装しようと思っています  Q1 案1と案2の検討結果についてお気づきの点があれあば教えて     ください  Q2 可能であれば、案2の実装方法についてヒント程度でもいいので     教えてください  以上

  • 【エクセル】横方向へ複数行の数式をコピー

    こんばんは^^ ちょっとエクセルで苦戦してる作業があるので何か良い方法があったら教えてください。   a    b     c    d    e(列) ------------------ 1| 2      3      3       2     1 2| 2      4       1      3      2 ・ ・ 9| sum  c9/a9  sum   b9*c9  b9+d9 (小計の行) 10| 2     3     3     2     1 ・ ・ ・ 14|  2      1      2      2     5 15| sum ・・・・      (小計の行) ・ ・ ・ 上記のようなレイアウトにしたとします。 1.小計行がたくさんあります。 2.それぞれの小計で合計する行数が違います。 3.横方向にsumを手軽にコピーしたいけど、列が多く、ところどころに関数が入っているので、無闇にドラッグしたりできません。 今は、例えば9行の小計を1つsumを使った後、関数が入っていない空白セルのみをctrlキーを駆使して1つ1つクリック、ペースト そして、次の小計行へ行き同じ作業を繰り返してます。 ただ、これだと横にも縦にも長いデータが入ってるので労力使いすぎます(^^; フィルタをかけて「空白以外」にして、横方向にsumをドラッグが出来たら良いなーって思ったんですが、フィルタって列にかけられないですよね? 何か良い方法ってありますか?

  • sqlについての質問

    お世話になります。 下記コードにて、抽出されたデータに不備があります。 「q2.新新品番(+) = A.品番」としていますが、 完全一致しない品番が見受けられ、trimを使ったら 良いのではと思うのですが、どこにtrimを入れたら 良いのか、又は考え方自体違うのか 現在テンパっている所でございます。 どなたか良いアドバイスを頂けたらと思い、 ご質問させて頂きました。 何卒、ご教示頂けます様、宜しくお願い致します。          記 select case when substr(q2.新新品番,8,1)='_' then substr(q2.新新品番,1,7) else q2.新新品番 end as 品番 ,SUM(q2.新新合格数) AS 生産合格数 ,A.伝票ID,A.品番,A.新入庫数量 as 区画入庫数,A.区画番号 from ( select case when substr(q1.新品番,6,1)='_' then substr(q1.新品番,1,5) else q1.新品番 end as 新新品番 ,SUM(q1.新合格数) AS 新新合格数 from ( SELECT 更新日時, case when substr(ハンドル,7,1)='_' then substr(ハンドル,1,6) else ハンドル end as 新品番 ,SUM(合格本数) AS 新合格数 FROM D最終検査履歴 WHERE 更新日時 BETWEEN '2012-5-31' and '2012-6-01' group by 更新日時, case when substr(ハンドル,7,1)='_' then substr(ハンドル,1,6) else ハンドル end )q1 group by case when substr(q1.新品番,6,1)='_' then substr(q1.新品番,1,5) else q1.新品番 end )q2 , (select 伝票ID,品番,sum(入庫数量)as 新入庫数量,区画番号 from D屋外入庫 where 登録日時 between '2012-5-31' and '2012-6-01' and 伝票ID='SN' group by 伝票ID, 品番, 区画番号 )A where q2.新新品番(+) = A.品番 group by case when substr(q2.新新品番,8,1)='_' then substr(q2.新新品番,1,7) else q2.新新品番 end, A.伝票ID, A.品番, A.新入庫数量, A.区画番号

  • 総計をエクセルVBAで出すには。。

    A列にいくつかランダムに小計が入っておりB列の数値をA列の小計が入っている 行まで数式で足しています。 例=SUM(B16:B20)   A列の最終行に総計が入っているのですが総計にはB列のいくつかの小計行を 足して総計を出したいです。 小計を出すにはこちらで教えて頂き、VBAで自動でいれることができたのですが 総計をいれることができません。 VBAではどのように組めばいいのでしょうか?

  • Excelマクロで不要な行を繰り返し処理で削除する

    下記の図表【事前】のA列に時間(シリアル値)が入力されていますが、 これをマクロを使って不要な時間帯のデータを行ごと削除したいです。 それを実行するためのマクロをご教示頂けますでしょうか? 削除対象の条件 ・9:00:00~18:00:00以外の夜間や早朝の時間帯は削除する。 その他 ・データが入力されている行数分繰り返し処理 ・秒数、分数は全て0 ・列は3列(B、C列は任意) ・Excelのバージョンは2007 【事前】   A                        B      C 1 yyyy/mm/dd 01:00:00 ※削除対象 2 yyyy/mm/dd 23:00:00 ※削除対象 3 yyyy/mm/dd 09:00:00 4 yyyy/mm/dd 15:00:00 5 yyyy/mm/dd 17:00:00 6 yyyy/mm/dd 19:00:00 ※削除対象 7 yyyy/mm/dd 04:00:00 ※削除対象 【事後】   A                        B      C 1 yyyy/mm/dd 09:00:00 2 yyyy/mm/dd 15:00:00 3 yyyy/mm/dd 17:00:00

  • エクセル 変数でのSUM

    エクセルのデータをグループに分け、小計を取りたいのですが、データ件数はそのつど異なります。 マクロを使い、クリックひとつで小計を出すようにしたいのです。 データの並び替え、グループが異なると小計用の行を挿入するところまでは出来たのですが、その後SUMの書き方が判りません 行の変数がLIN_A、LIN_B の場合 Cells(LIN_C,3).VALUE=SUM(C"LIN_A":C"LIN_B")??? のように書くにはどのようにすれば良いでしょうか? 宜しくお願いいたします。

  • グループ化したいのですが

    テーブルAに以下のような項目があります。 [MAIL_ID][SEND_DATE][USER_ID] テーブルBに以下のような項目があります。 [USER_ID][SEI][MEI] やりたい事は、 ・テーブルAとBを[USER_ID]をキーにして結合させたい。 ・テーブルAの[MAIL_ID]ごとにグループ化して1行にまとめたい。 ・テーブルBの[SEI]と[MEI]をつなげて1つの項目として表示させたい。 これを実現させるには、どういうSQLを書けば良いでしょうか? 私が試したのは、以下のSQL文です。 SELECT A.MAIL_ID, MIN(A.SEND_DATE) AS SEND_DATE,MIN( A.USER_ID) AS USER_ID,MIN(B.SEI) + MIN(B.MEI) AS ATESAKI FROM TABLEA A INNER JOIN TABLEB B ON A.USER_ID = B.USER_ID WHERE A.SEND_ID = '900001' GROUP BY A.MAIL_ID でも、これだと同じMAIL_IDが複数存在すると[SEI][MEI]が別人のものがくっついてしまいます。当然ですが。 グループ化する前に[SEI][MEI]を連結させる処理が必要なのだろうと思うのですが、それをどうすれば良いのかが分かりません...。 どうかよろしくお願いします。m(_ _)m

  • Excelの集計表で固定していない小計があり、計算結果を上方の小計行に入れたい。

    エクセル2K使用で300行程度の表があり、2行目まではタイトル行です。 A列  B列 C列(金額)2行目 あ   小計  60 い  (空白)  10 う  (空白)  20 え  (空白)  30 お   小計  90 か  (空白)  40 き  (空白)  50 く   小計  400 ←計算が合いません け  (空白)  60 こ  (空白)  70 さ  (空白)  80 し  (空白)  90 す  (空白)  100 カテゴリOffice系で上記の質問をいたしましたが、 "VBAで無いと難しいと思う"とアドバイスいただきましたので、 こちらで質問させていただきます。 VBAは超初心者ですが、色々の例題を検索し試行錯誤して下記マクロを 作成しましたが、一番下の小計が合いません宜しくお願いします。 Sub SYOUKEI() Dim i As Long Dim myLAST_ROW As Long Dim myTOP_ROW As Long Dim myBOTTOM_ROW As Long Dim myRANGE As Range With ActiveSheet myLAST_ROW = .Cells(Rows.Count, 1).End(xlUp).Row myTOP_ROW = 3 For i = myLAST_ROW To 1 Step -1 If .Cells(i, 2).Value = "小計" Then myBOTTOM_ROW = i + 1 Set myRANGE = _ .Range(.Cells(myTOP_ROW, 3), .Cells(myBOTTOM_ROW, 3)) .Cells(i, 3).Value = WorksheetFunction.Sum(myRANGE) myTOP_ROW = i - 1 End If Next i End With Set myRANGE = Nothing End Sub

  • ファイルから特定の部分をキーにして sort したい!

    皆様、お知恵を貸してください。 現在、あるCGIを作成しています。 ID<>yyyy/mm/dd<>Count<>***<>Adress<>+++<>@@<>.com<> 一行が上記の構成になっているファイルを読み込んで、ブラウザに表示させるCGIなのですが、Count の部分をキーにして sort し昇順で表示させたいのです。 現在は、ファイルの上から一行ずつ読み込んで、 ・ID:hogehoge ・yyyy/mm/dd:yyyy/mm/dd ・Count:Count のように表示するところまで出来てます。 この3行を1セットにし Count をキーに表示させたいのです。 宜しく御願い致します<(_ _)>

    • ベストアンサー
    • Perl
  • yyyy/mm/ddからyyyy/mmへの変換

    いつもお世話になっております. Excelの第3列の2行目~2027行目までのセルに yyyy/mm/dd と入力されています. dd (日付)を取り除き,yyyy/mm という入力に直したいのですが,方法が分からずに困っております. Sub test() Dim row As Integer For row = 2 To 2027    Sheets("Sheet1").Cells(row, 3).NumberFormat = "yyyy/mm" Next End Sub 上記のようにしてみたのですが,セルの表示形式が変わっただけで, 数式バーの表示を見てみると実質的に dd が残っています. 良い方法をご存知の方がいらっしゃいましたら, ご教示の程どうぞ宜しくお願いいたします.